diff --git a/.github/workflows/compile-queries.yml b/.github/workflows/compile-queries.yml index 292ae3b8b230..38452f97d36b 100644 --- a/.github/workflows/compile-queries.yml +++ b/.github/workflows/compile-queries.yml @@ -29,8 +29,6 @@ jobs: key: all-queries - name: check formatting run: find shared */ql -type f \( -name "*.qll" -o -name "*.ql" \) -print0 | xargs -0 -n 3000 -P 10 codeql query format -q --check-only - - name: Omit DatabaseQualityDiagnostics.ql from compile checking # Remove me once CodeQL 2.18.0 is released! - run: mv java/ql/src/Telemetry/DatabaseQualityDiagnostics.ql{,.hidden} - name: compile queries - check-only # run with --check-only if running in a PR (github.sha != main) if : ${{ github.event_name == 'pull_request' }} @@ -41,6 +39,3 @@ jobs: if : ${{ github.event_name != 'pull_request' }} shell: bash run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 - - name: Restore DatabaseQualityDiagnostics.ql after compile checking # Remove me once CodeQL 2.18.0 is released - run: mv java/ql/src/Telemetry/DatabaseQualityDiagnostics.ql{.hidden,} - diff --git a/MODULE.bazel b/MODULE.bazel index b0957b89a75c..65fc8120b5a5 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -112,6 +112,7 @@ use_repo( "kotlin-compiler-1.9.0-Beta", "kotlin-compiler-1.9.20-Beta", "kotlin-compiler-2.0.0-RC1", + "kotlin-compiler-2.0.20-Beta2", "kotlin-compiler-embeddable-1.5.0", "kotlin-compiler-embeddable-1.5.10", "kotlin-compiler-embeddable-1.5.20", @@ -124,6 +125,7 @@ use_repo( "kotlin-compiler-embeddable-1.9.0-Beta", "kotlin-compiler-embeddable-1.9.20-Beta", "kotlin-compiler-embeddable-2.0.0-RC1", + "kotlin-compiler-embeddable-2.0.20-Beta2", "kotlin-stdlib-1.5.0", "kotlin-stdlib-1.5.10", "kotlin-stdlib-1.5.20", @@ -136,11 +138,16 @@ use_repo( "kotlin-stdlib-1.9.0-Beta", "kotlin-stdlib-1.9.20-Beta", "kotlin-stdlib-2.0.0-RC1", + "kotlin-stdlib-2.0.20-Beta2", ) go_sdk = use_extension("@rules_go//go:extensions.bzl", "go_sdk") go_sdk.download(version = "1.22.2") +go_deps = use_extension("@gazelle//:extensions.bzl", "go_deps") +go_deps.from_file(go_mod = "//go/extractor:go.mod") +use_repo(go_deps, "org_golang_x_mod", "org_golang_x_tools") + lfs_files = use_repo_rule("//misc/bazel:lfs.bzl", "lfs_files") lfs_files( diff --git a/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/exprs.ql b/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/exprs.ql new file mode 100644 index 000000000000..d1b8af0b6664 --- /dev/null +++ b/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/exprs.ql @@ -0,0 +1,17 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location_expr { + string toString() { none() } +} + +predicate isExprWithNewBuiltin(Expr expr) { + exists(int kind | exprs(expr, kind, _) | 364 <= kind and kind <= 384) +} + +from Expr expr, int kind, int kind_new, Location location +where + exprs(expr, kind, location) and + if isExprWithNewBuiltin(expr) then kind_new = 1 else kind_new = kind +select expr, kind_new, location diff --git a/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/old.dbscheme b/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/old.dbscheme new file mode 100644 index 000000000000..3d35dd6b50ed --- /dev/null +++ b/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/old.dbscheme @@ -0,0 +1,2289 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/semmlecode.cpp.dbscheme b/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..abfce5c170f9 --- /dev/null +++ b/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/semmlecode.cpp.dbscheme @@ -0,0 +1,2251 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/upgrade.properties b/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/upgrade.properties new file mode 100644 index 000000000000..d697a16a42fd --- /dev/null +++ b/cpp/downgrades/3d35dd6b50edfc540c14c6757e0c7b3c5b7b04dd/upgrade.properties @@ -0,0 +1,3 @@ +description: Add new builtin operations +compatibility: partial +exprs.rel: run exprs.qlo diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 61cbcd1318ac..9f01040830c1 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.3.0 + +### New Features + +* Models-as-data alert provenance information has been extended to the C/C++ language. Any qltests that include the edges relation in their output (for example, `.qlref`s that reference path-problem queries) will need to be have their expected output updated accordingly. +* Added subclasses of `BuiltInOperations` for `__builtin_has_attribute`, `__builtin_is_corresponding_member`, `__builtin_is_pointer_interconvertible_with_class`, `__is_assignable_no_precondition_check`, `__is_bounded_array`, `__is_convertible`, `__is_corresponding_member`, `__is_nothrow_convertible`, `__is_pointer_interconvertible_with_class`, `__is_referenceable`, `__is_same_as`, `__is_trivially_copy_assignable`, `__is_unbounded_array`, `__is_valid_winrt_type`, `_is_win_class`, `__is_win_interface`, `__reference_binds_to_temporary`, `__reference_constructs_from_temporary`, and `__reference_converts_from_temporary`. +* The class `NewArrayExpr` adds a predicate `getArraySize()` to allow a more convenient way to access the static size of the array when the extent is missing. + ## 1.2.0 ### New Features diff --git a/cpp/ql/lib/change-notes/released/1.3.0.md b/cpp/ql/lib/change-notes/released/1.3.0.md new file mode 100644 index 000000000000..3c3010da96d3 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/1.3.0.md @@ -0,0 +1,7 @@ +## 1.3.0 + +### New Features + +* Models-as-data alert provenance information has been extended to the C/C++ language. Any qltests that include the edges relation in their output (for example, `.qlref`s that reference path-problem queries) will need to be have their expected output updated accordingly. +* Added subclasses of `BuiltInOperations` for `__builtin_has_attribute`, `__builtin_is_corresponding_member`, `__builtin_is_pointer_interconvertible_with_class`, `__is_assignable_no_precondition_check`, `__is_bounded_array`, `__is_convertible`, `__is_corresponding_member`, `__is_nothrow_convertible`, `__is_pointer_interconvertible_with_class`, `__is_referenceable`, `__is_same_as`, `__is_trivially_copy_assignable`, `__is_unbounded_array`, `__is_valid_winrt_type`, `_is_win_class`, `__is_win_interface`, `__reference_binds_to_temporary`, `__reference_constructs_from_temporary`, and `__reference_converts_from_temporary`. +* The class `NewArrayExpr` adds a predicate `getArraySize()` to allow a more convenient way to access the static size of the array when the extent is missing. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 75430e73d1c4..ec16350ed6fd 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.0 +lastReleaseVersion: 1.3.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index ed373ae9678a..aee0698f32a7 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 1.2.0 +version: 1.3.0 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index 3d9a648ea6ce..73456e457170 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -146,7 +146,7 @@ predicate summaryModel(string row) { any(SummaryModelCsv s).row(row) } /** Holds if a source model exists for the given parameters. */ predicate sourceModel( string namespace, string type, boolean subtypes, string name, string signature, string ext, - string output, string kind, string provenance + string output, string kind, string provenance, string model ) { exists(string row | sourceModel(row) and @@ -160,16 +160,20 @@ predicate sourceModel( row.splitAt(";", 6) = output and row.splitAt(";", 7) = kind ) and - provenance = "manual" + provenance = "manual" and + model = "" or - Extensions::sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance, - _) + exists(QlBuiltins::ExtensionId madId | + Extensions::sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, + provenance, madId) and + model = "MaD:" + madId.toString() + ) } /** Holds if a sink model exists for the given parameters. */ predicate sinkModel( string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string kind, string provenance + string input, string kind, string provenance, string model ) { exists(string row | sinkModel(row) and @@ -183,9 +187,14 @@ predicate sinkModel( row.splitAt(";", 6) = input and row.splitAt(";", 7) = kind ) and - provenance = "manual" + provenance = "manual" and + model = "" or - Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, _) + exists(QlBuiltins::ExtensionId madId | + Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, + madId) and + model = "MaD:" + madId.toString() + ) } /** @@ -195,7 +204,7 @@ predicate sinkModel( */ private predicate summaryModel0( string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance + string input, string output, string kind, string provenance, string model ) { exists(string row | summaryModel(row) and @@ -210,10 +219,14 @@ private predicate summaryModel0( row.splitAt(";", 7) = output and row.splitAt(";", 8) = kind ) and - provenance = "manual" + provenance = "manual" and + model = "" or - Extensions::summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, - provenance, _) + exists(QlBuiltins::ExtensionId madId | + Extensions::summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, + provenance, madId) and + model = "MaD:" + madId.toString() + ) } /** @@ -234,19 +247,20 @@ private predicate expandInputAndOutput( */ predicate summaryModel( string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance + string input, string output, string kind, string provenance, string model ) { exists(string input0, string output0 | - summaryModel0(namespace, type, subtypes, name, signature, ext, input0, output0, kind, provenance) and + summaryModel0(namespace, type, subtypes, name, signature, ext, input0, output0, kind, + provenance, model) and expandInputAndOutput(input0, input, output0, output, [0 .. Private::getMaxElementContentIndirectionIndex() - 1]) ) } private predicate relevantNamespace(string namespace) { - sourceModel(namespace, _, _, _, _, _, _, _, _) or - sinkModel(namespace, _, _, _, _, _, _, _, _) or - summaryModel(namespace, _, _, _, _, _, _, _, _, _) + sourceModel(namespace, _, _, _, _, _, _, _, _, _) or + sinkModel(namespace, _, _, _, _, _, _, _, _, _) or + summaryModel(namespace, _, _, _, _, _, _, _, _, _, _) } private predicate namespaceLink(string shortns, string longns) { @@ -276,17 +290,17 @@ predicate modelCoverage(string namespace, int namespaces, string kind, string pa part = "source" and n = strictcount(string subns, string type, boolean subtypes, string name, string signature, - string ext, string output, string provenance | + string ext, string output, string provenance, string model | canonicalNamespaceLink(namespace, subns) and - sourceModel(subns, type, subtypes, name, signature, ext, output, kind, provenance) + sourceModel(subns, type, subtypes, name, signature, ext, output, kind, provenance, model) ) or part = "sink" and n = strictcount(string subns, string type, boolean subtypes, string name, string signature, - string ext, string input, string provenance | + string ext, string input, string provenance, string model | canonicalNamespaceLink(namespace, subns) and - sinkModel(subns, type, subtypes, name, signature, ext, input, kind, provenance) + sinkModel(subns, type, subtypes, name, signature, ext, input, kind, provenance, model) ) or part = "summary" and @@ -294,7 +308,7 @@ predicate modelCoverage(string namespace, int namespaces, string kind, string pa strictcount(string subns, string type, boolean subtypes, string name, string signature, string ext, string input, string output, string provenance | canonicalNamespaceLink(namespace, subns) and - summaryModel(subns, type, subtypes, name, signature, ext, input, output, kind, provenance) + summaryModel(subns, type, subtypes, name, signature, ext, input, output, kind, provenance, _) ) ) } @@ -303,9 +317,9 @@ predicate modelCoverage(string namespace, int namespaces, string kind, string pa module CsvValidation { private string getInvalidModelInput() { exists(string pred, AccessPath input, string part | - sinkModel(_, _, _, _, _, _, input, _, _) and pred = "sink" + sinkModel(_, _, _, _, _, _, input, _, _, _) and pred = "sink" or - summaryModel(_, _, _, _, _, _, input, _, _, _) and pred = "summary" + summaryModel(_, _, _, _, _, _, input, _, _, _, _) and pred = "summary" | ( invalidSpecComponent(input, part) and @@ -322,9 +336,9 @@ module CsvValidation { private string getInvalidModelOutput() { exists(string pred, string output, string part | - sourceModel(_, _, _, _, _, _, output, _, _) and pred = "source" + sourceModel(_, _, _, _, _, _, output, _, _, _) and pred = "source" or - summaryModel(_, _, _, _, _, _, _, output, _, _) and pred = "summary" + summaryModel(_, _, _, _, _, _, _, output, _, _, _) and pred = "summary" | invalidSpecComponent(output, part) and not part = "" and @@ -334,11 +348,11 @@ module CsvValidation { } private module KindValConfig implements SharedModelVal::KindValidationConfigSig { - predicate summaryKind(string kind) { summaryModel(_, _, _, _, _, _, _, _, kind, _) } + predicate summaryKind(string kind) { summaryModel(_, _, _, _, _, _, _, _, kind, _, _) } - predicate sinkKind(string kind) { sinkModel(_, _, _, _, _, _, _, kind, _) } + predicate sinkKind(string kind) { sinkModel(_, _, _, _, _, _, _, kind, _, _) } - predicate sourceKind(string kind) { sourceModel(_, _, _, _, _, _, _, kind, _) } + predicate sourceKind(string kind) { sourceModel(_, _, _, _, _, _, _, kind, _, _) } } private module KindVal = SharedModelVal::KindValidation; @@ -379,11 +393,11 @@ module CsvValidation { private string getInvalidModelSignature() { exists(string pred, string namespace, string type, string name, string signature, string ext | - sourceModel(namespace, type, _, name, signature, ext, _, _, _) and pred = "source" + sourceModel(namespace, type, _, name, signature, ext, _, _, _, _) and pred = "source" or - sinkModel(namespace, type, _, name, signature, ext, _, _, _) and pred = "sink" + sinkModel(namespace, type, _, name, signature, ext, _, _, _, _) and pred = "sink" or - summaryModel(namespace, type, _, name, signature, ext, _, _, _, _) and pred = "summary" + summaryModel(namespace, type, _, name, signature, ext, _, _, _, _, _) and pred = "summary" | not namespace.regexpMatch("[a-zA-Z0-9_\\.:]*") and result = "Dubious namespace \"" + namespace + "\" in " + pred + " model." @@ -415,9 +429,9 @@ module CsvValidation { private predicate elementSpec( string namespace, string type, boolean subtypes, string name, string signature, string ext ) { - sourceModel(namespace, type, subtypes, name, signature, ext, _, _, _) or - sinkModel(namespace, type, subtypes, name, signature, ext, _, _, _) or - summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _) + sourceModel(namespace, type, subtypes, name, signature, ext, _, _, _, _) or + sinkModel(namespace, type, subtypes, name, signature, ext, _, _, _, _) or + summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _, _) } /** Gets the fully templated version of `f`. */ @@ -867,9 +881,9 @@ private module Cached { * model. */ cached - predicate sourceNode(DataFlow::Node node, string kind) { + predicate sourceNode(DataFlow::Node node, string kind, string model) { exists(SourceSinkInterpretationInput::InterpretNode n | - isSourceNode(n, kind, _) and n.asNode() = node // TODO + isSourceNode(n, kind, model) and n.asNode() = node ) } @@ -878,40 +892,57 @@ private module Cached { * model. */ cached - predicate sinkNode(DataFlow::Node node, string kind) { + predicate sinkNode(DataFlow::Node node, string kind, string model) { exists(SourceSinkInterpretationInput::InterpretNode n | - isSinkNode(n, kind, _) and n.asNode() = node // TODO + isSinkNode(n, kind, model) and n.asNode() = node ) } } import Cached +/** + * Holds if `node` is specified as a source with the given kind in a MaD flow + * model. + */ +predicate sourceNode(DataFlow::Node node, string kind) { sourceNode(node, kind, _) } + +/** + * Holds if `node` is specified as a sink with the given kind in a MaD flow + * model. + */ +predicate sinkNode(DataFlow::Node node, string kind) { sinkNode(node, kind, _) } + private predicate interpretSummary( - Function f, string input, string output, string kind, string provenance + Function f, string input, string output, string kind, string provenance, string model ) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | - summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, provenance) and + summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, provenance, + model) and f = interpretElement(namespace, type, subtypes, name, signature, ext) ) } // adapter class for converting Mad summaries to `SummarizedCallable`s private class SummarizedCallableAdapter extends SummarizedCallable { - SummarizedCallableAdapter() { interpretSummary(this, _, _, _, _) } + SummarizedCallableAdapter() { interpretSummary(this, _, _, _, _, _) } - private predicate relevantSummaryElementManual(string input, string output, string kind) { + private predicate relevantSummaryElementManual( + string input, string output, string kind, string model + ) { exists(Provenance provenance | - interpretSummary(this, input, output, kind, provenance) and + interpretSummary(this, input, output, kind, provenance, model) and provenance.isManual() ) } - private predicate relevantSummaryElementGenerated(string input, string output, string kind) { + private predicate relevantSummaryElementGenerated( + string input, string output, string kind, string model + ) { exists(Provenance provenance | - interpretSummary(this, input, output, kind, provenance) and + interpretSummary(this, input, output, kind, provenance, model) and provenance.isGenerated() ) } @@ -920,18 +951,17 @@ private class SummarizedCallableAdapter extends SummarizedCallable { string input, string output, boolean preservesValue, string model ) { exists(string kind | - this.relevantSummaryElementManual(input, output, kind) + this.relevantSummaryElementManual(input, output, kind, model) or - not this.relevantSummaryElementManual(_, _, _) and - this.relevantSummaryElementGenerated(input, output, kind) + not this.relevantSummaryElementManual(_, _, _, _) and + this.relevantSummaryElementGenerated(input, output, kind, model) | if kind = "value" then preservesValue = true else preservesValue = false - ) and - model = "" // TODO + ) } override predicate hasProvenance(Provenance provenance) { - interpretSummary(this, _, _, _, provenance) + interpretSummary(this, _, _, _, provenance, _) } } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll index 11091b3c3585..f19678bfd073 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll @@ -239,17 +239,7 @@ class CastNode extends Node { CastNode() { none() } // stub implementation } -class DataFlowCallable extends Function { - /** Gets a best-effort total ordering. */ - int totalorder() { - this = - rank[result](DataFlowCallable c, string file, int startline, int startcolumn | - c.getLocation().hasLocationInfo(file, startline, startcolumn, _, _) - | - c order by file, startline, startcolumn - ) - } -} +class DataFlowCallable extends Function { } class DataFlowExpr = Expr; @@ -287,24 +277,12 @@ class DataFlowCall extends Expr instanceof Call { DataFlowCallable getARuntimeTarget(){ result = super.getTarget() } /** Gets the enclosing callable of this call. */ DataFlowCallable getEnclosingCallable() { result = this.getEnclosingFunction() } - - /** Gets a best-effort total ordering. */ - int totalorder() { - this = - rank[result](DataFlowCall c, int startline, int startcolumn | - c.getLocation().hasLocationInfo(_, startline, startcolumn, _, _) - | - c order by startline, startcolumn - ) - } } class NodeRegion instanceof Unit { string toString() { result = "NodeRegion" } predicate contains(Node n) { none() } - - int totalOrder() { result = 1 } } predicate isUnreachableInCall(NodeRegion nr, DataFlowCall call) { none() } // stub implementation diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll index dc8e8aaa3143..424f3651bf88 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll @@ -112,9 +112,8 @@ module SourceSinkInterpretationInput implements exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance) and - e = interpretElement(namespace, type, subtypes, name, signature, ext) and - model = "" // TODO + sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance, model) and + e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } @@ -128,9 +127,8 @@ module SourceSinkInterpretationInput implements exists( string package, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance) and - e = interpretElement(package, type, subtypes, name, signature, ext) and - model = "" // TODO + sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, model) and + e = interpretElement(package, type, subtypes, name, signature, ext) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/BuiltInOperations.qll b/cpp/ql/lib/semmle/code/cpp/exprs/BuiltInOperations.qll index ba924d58da5b..dcf72604ca92 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/BuiltInOperations.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/BuiltInOperations.qll @@ -383,6 +383,37 @@ class BuiltInOperationIsConvertibleTo extends BuiltInOperation, @isconvtoexpr { override string getAPrimaryQlClass() { result = "BuiltInOperationIsConvertibleTo" } } +/** + * A C++ `__is_convertible` built-in operation (used by some implementations + * of the `` header). + * + * Returns `true` if the first type can be converted to the second type. + * ``` + * bool v = __is_convertible(MyType, OtherType); + * ``` + */ +class BuiltInOperationIsConvertible extends BuiltInOperation, @isconvertible { + override string toString() { result = "__is_convertible" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsConvertible" } +} + +/** + * A C++ `__is_nothrow_convertible` built-in operation (used by some implementations + * of the `` header). + * + * Returns `true` if the first type can be converted to the second type and the + * conversion operator has an empty exception specification. + * ``` + * bool v = __is_nothrow_convertible(MyType, OtherType); + * ``` + */ +class BuiltInOperationIsNothrowConvertible extends BuiltInOperation, @isnothrowconvertible { + override string toString() { result = "__is_nothrow_convertible" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsNothrowConvertible" } +} + /** * A C++ `__is_empty` built-in operation (used by some implementations of the * `` header). @@ -647,8 +678,7 @@ class BuiltInOperationIsTriviallyAssignable extends BuiltInOperation, @istrivial * The `__is_nothrow_assignable` built-in operation (used by some * implementations of the `` header). * - * Returns true if there exists a `C::operator =(const D& d) nothrow` - * assignment operator (i.e, with an empty exception specification). + * Returns true if there exists an assignment operator with an empty exception specification. * ``` * bool v = __is_nothrow_assignable(MyType1, MyType2); * ``` @@ -663,8 +693,7 @@ class BuiltInOperationIsNothrowAssignable extends BuiltInOperation, @isnothrowas * The `__is_assignable` built-in operation (used by some implementations * of the `` header). * - * Returns true if there exists a `C::operator =(const D& d)` assignment - * operator. + * Returns true if there exists an assignment operator. * ``` * bool v = __is_assignable(MyType1, MyType2); * ``` @@ -675,6 +704,25 @@ class BuiltInOperationIsAssignable extends BuiltInOperation, @isassignable { override string getAPrimaryQlClass() { result = "BuiltInOperationIsAssignable" } } +/** + * The `__is_assignable_no_precondition_check` built-in operation (used by some + * implementations of the `` header). + * + * Returns true if there exists an assignment operator. + * ``` + * bool v = __is_assignable_no_precondition_check(MyType1, MyType2); + * ``` + */ +class BuiltInOperationIsAssignableNoPreconditionCheck extends BuiltInOperation, + @isassignablenopreconditioncheck +{ + override string toString() { result = "__is_assignable_no_precondition_check" } + + override string getAPrimaryQlClass() { + result = "BuiltInOperationIsAssignableNoPreconditionCheck" + } +} + /** * The `__is_standard_layout` built-in operation (used by some implementations * of the `` header). @@ -708,6 +756,20 @@ class BuiltInOperationIsTriviallyCopyable extends BuiltInOperation, @istrivially override string getAPrimaryQlClass() { result = "BuiltInOperationIsTriviallyCopyable" } } +/** + * The `__is_trivially_copy_assignable` built-in operation (used by some + * implementations of the `` header). + * + * Returns `true` if instances of this type can be copied using a trivial + * copy operator. + */ +class BuiltInOperationIsTriviallyCopyAssignable extends BuiltInOperation, @istriviallycopyassignable +{ + override string toString() { result = "__is_trivially_copy_assignable" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsTriviallyCopyAssignable" } +} + /** * The `__is_literal_type` built-in operation (used by some implementations of * the `` header). @@ -1062,6 +1124,24 @@ class BuiltInOperationIsSame extends BuiltInOperation, @issame { override string getAPrimaryQlClass() { result = "BuiltInOperationIsSame" } } +/** + * A C++ `__is_same_as` built-in operation (used by some implementations of the + * `` header). + * + * Returns `true` if two types are the same. + * ``` + * template + * struct is_same + * : public integral_constant + * { }; + * ``` + */ +class BuiltInOperationIsSameAs extends BuiltInOperation, @issameas { + override string toString() { result = "__is_same_as" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsSameAs" } +} + /** * A C++ `__is_function` built-in operation (used by some implementations of the * `` header). @@ -1120,6 +1200,87 @@ class BuiltInOperationIsPointerInterconvertibleBaseOf extends BuiltInOperation, } } +/** + * A C++ `__is_pointer_interconvertible_with_class` built-in operation (used + * by some implementations of the `` header). + * + * Returns `true` if a member pointer is pointer-interconvertible with a + * class type. + * ``` + * template + * constexpr bool is_pointer_interconvertible_with_class(_Up _Tp::*mp) noexcept + * = __is_pointer_interconvertible_with_class(_Tp, mp); + * ``` + */ +class BuiltInOperationIsPointerInterconvertibleWithClass extends BuiltInOperation, + @ispointerinterconvertiblewithclass +{ + override string toString() { result = "__is_pointer_interconvertible_with_class" } + + override string getAPrimaryQlClass() { + result = "BuiltInOperationIsPointerInterconvertibleWithClass" + } +} + +/** + * A C++ `__builtin_is_pointer_interconvertible_with_class` built-in operation (used + * by some implementations of the `` header). + * + * Returns `true` if a member pointer is pointer-interconvertible with a class type. + * ``` + * template + * constexpr bool is_pointer_interconvertible_with_class(_Up _Tp::*mp) noexcept + * = __builtin_is_pointer_interconvertible_with_class(mp); + * ``` + */ +class BuiltInOperationBuiltInIsPointerInterconvertible extends BuiltInOperation, + @builtinispointerinterconvertiblewithclass +{ + override string toString() { result = "__builtin_is_pointer_interconvertible_with_class" } + + override string getAPrimaryQlClass() { + result = "BuiltInOperationBuiltInIsPointerInterconvertible" + } +} + +/** + * A C++ `__is_corresponding_member` built-in operation (used + * by some implementations of the `` header). + * + * Returns `true` if two member pointers refer to corresponding + * members in the initial sequences of two class types. + * ``` + * template + * constexpr bool is_corresponding_member(_Up1 _Tp1::*mp1, _Up2 _Tp2::*mp2 ) noexcept + * = __is_corresponding_member(_Tp1, _Tp2, mp1, mp2); + * ``` + */ +class BuiltInOperationIsCorrespondingMember extends BuiltInOperation, @iscorrespondingmember { + override string toString() { result = "__is_corresponding_member" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsCorrespondingMember" } +} + +/** + * A C++ `__builtin_is_corresponding_member` built-in operation (used + * by some implementations of the `` header). + * + * Returns `true` if two member pointers refer to corresponding + * members in the initial sequences of two class types. + * ``` + * template + * constexpr bool is_corresponding_member(_Up1 _Tp1::*mp1, _Up2 _Tp2::*mp2 ) noexcept + * = __builtin_is_corresponding_member(mp1, mp2); + * ``` + */ +class BuiltInOperationBuiltInIsCorrespondingMember extends BuiltInOperation, + @builtiniscorrespondingmember +{ + override string toString() { result = "__builtin_is_corresponding_member" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationBuiltInIsCorrespondingMember" } +} + /** * A C++ `__is_array` built-in operation (used by some implementations of the * `` header). @@ -1138,6 +1299,42 @@ class BuiltInOperationIsArray extends BuiltInOperation, @isarray { override string getAPrimaryQlClass() { result = "BuiltInOperationIsArray" } } +/** + * A C++ `__is_bounded_array` built-in operation (used by some implementations + * of the `` header). + * + * Returns `true` if a type is a bounded array type. + * ``` + * template + * struct is_bounded_array + * : public integral_constant + * { }; + * ``` + */ +class BuiltInOperationIsBoundedArray extends BuiltInOperation, @isboundedarray { + override string toString() { result = "__is_bounded_array" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsBoundedArray" } +} + +/** + * A C++ `__is_unbounded_array` built-in operation (used by some implementations + * of the `` header). + * + * Returns `true` if a type is an unbounded array type. + * ``` + * template + * struct is_bounded_array + * : public integral_constant + * { }; + * ``` + */ +class BuiltInOperationIsUnboundedArray extends BuiltInOperation, @isunboundedarray { + override string toString() { result = "__is_unbounded_array" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsUnboundedArray" } +} + /** * A C++ `__array_rank` built-in operation (used by some implementations of the * `` header). @@ -1554,10 +1751,10 @@ class BuiltInBitCast extends BuiltInOperation, @builtinbitcast { * * Returns `true` if a type is a trivial type. * ``` - * template - * struct is_trivial - * : public integral_constant - * {}; + * template + * struct is_trivial + * : public integral_constant + * {}; * ``` */ class BuiltInIsTrivial extends BuiltInOperation, @istrivialexpr { @@ -1565,3 +1762,126 @@ class BuiltInIsTrivial extends BuiltInOperation, @istrivialexpr { override string getAPrimaryQlClass() { result = "BuiltInIsTrivial" } } + +/** + * A C++ `__reference_constructs_from_temporary` built-in operation + * (used by some implementations of the `` header). + * + * Returns `true` if a reference type `_Tp` is bound to an expression of + * type `_Up` in direct-initialization, and a temporary object is bound. + * ``` + * template + * struct reference_constructs_from_temporary + * : public integral_constant + * {}; + * ``` + */ +class BuiltInOperationReferenceConstructsFromTemporary extends BuiltInOperation, + @referenceconstructsfromtemporary +{ + override string toString() { result = "__reference_constructs_from_temporary" } + + override string getAPrimaryQlClass() { + result = "BuiltInOperationReferenceConstructsFromTemporary" + } +} + +/** + * A C++ `__reference_converts_from_temporary` built-in operation + * (used by some implementations of the `` header). + * + * Returns `true` if a reference type `_Tp` is bound to an expression of + * type `_Up` in copy-initialization, and a temporary object is bound. + * ``` + * template + * struct reference_converts_from_temporary + * : public integral_constant + * {}; + * ``` + */ +class BuiltInOperationReferenceCovertsFromTemporary extends BuiltInOperation, + @referenceconvertsfromtemporary +{ + override string toString() { result = "__reference_converts_from_temporary" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationReferenceCovertsFromTemporary" } +} + +/** + * A C++ `__reference_binds_to_temporary` built-in operation (used by some + * implementations of the `` header). + * + * Returns `true` if a reference of type `Type1` is bound to an expression of + * type `Type1`, and a temporary object is bound. + * ``` + * __reference_binds_to_temporary(Type1, Type2) + */ +class BuiltInOperationReferenceBindsToTemporary extends BuiltInOperation, @referencebindstotemporary +{ + override string toString() { result = "__reference_binds_to_temporary" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationReferenceBindsToTemporary" } +} + +/** + * A C++ `__builtin_has_attribute` built-in operation. + * + * Returns `true` if a type or expression has been declared with the + * specified attribute. + * ``` + * __attribute__ ((aligned(8))) int v; + * bool has_attribute = __builtin_has_attribute(v, aligned); + * ``` + */ +class BuiltInOperationHasAttribute extends BuiltInOperation, @builtinhasattribute { + override string toString() { result = "__builtin_has_attribute" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationHasAttribute" } +} + +/** + * A C++ `__is_referenceable` built-in operation. + * + * Returns `true` if a type can be referenced. + * ``` + * bool is_referenceable = __is_referenceable(int); + * ``` + */ +class BuiltInOperationIsReferenceable extends BuiltInOperation, @isreferenceable { + override string toString() { result = "__is_referenceable" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsReferenceable" } +} + +/** + * The `__is_valid_winrt_type` built-in operation. This is a Microsoft extension. + * + * Returns `true` if the type is a valid WinRT type. + */ +class BuiltInOperationIsValidWinRtType extends BuiltInOperation, @isvalidwinrttype { + override string toString() { result = "__is_valid_winrt_type" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsValidWinRtType" } +} + +/** + * The `__is_win_class` built-in operation. This is a Microsoft extension. + * + * Returns `true` if the class is a ref class. + */ +class BuiltInOperationIsWinClass extends BuiltInOperation, @iswinclass { + override string toString() { result = "__is_win_class" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsWinClass" } +} + +/** + * The `__is_win_class` built-in operation. This is a Microsoft extension. + * + * Returns `true` if the class is an interface class. + */ +class BuiltInOperationIsWinInterface extends BuiltInOperation, @iswininterface { + override string toString() { result = "__is_win_interface" } + + override string getAPrimaryQlClass() { result = "BuiltInOperationIsWinInterface" } +} diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index bf56a121821c..0d68bb1047fa 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -949,6 +949,16 @@ class NewArrayExpr extends NewOrNewArrayExpr, @new_array_expr { * gives nothing, as the 10 is considered part of the type. */ Expr getExtent() { result = this.getChild(2) } + + /** + * Gets the number of elements in the array, if available. + * + * For example, `new int[]{1,2,3}` has an array size of 3. + */ + int getArraySize() { + result = this.getAllocatedType().(ArrayType).getArraySize() or + result = this.getInitializer().(ArrayAggregateLiteral).getArraySize() + } } private class TDeleteOrDeleteArrayExpr = @delete_expr or @delete_array_expr; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 34fdb500139a..9672f27199d6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -104,7 +104,7 @@ predicate hasRawIndirectInstruction(Instruction instr, int indirectionIndex) { cached private newtype TDefImpl = - TDefAddressImpl(BaseIRVariable v) or + TDefAddressImpl(BaseSourceVariable v) or TDirectDefImpl(Operand address, int indirectionIndex) { isDef(_, _, address, _, _, indirectionIndex) } or @@ -325,9 +325,9 @@ private Instruction getInitializationTargetAddress(IRVariable v) { ) } -/** An initial definition of an `IRVariable`'s address. */ -private class DefAddressImpl extends DefImpl, TDefAddressImpl { - BaseIRVariable v; +/** An initial definition of an SSA variable address. */ +abstract private class DefAddressImpl extends DefImpl, TDefAddressImpl { + BaseSourceVariable v; DefAddressImpl() { this = TDefAddressImpl(v) and @@ -342,6 +342,19 @@ private class DefAddressImpl extends DefImpl, TDefAddressImpl { final override Node0Impl getValue() { none() } + override Cpp::Location getLocation() { result = v.getLocation() } + + final override SourceVariable getSourceVariable() { + result.getBaseVariable() = v and + result.getIndirection() = 0 + } + + final override BaseSourceVariable getBaseSourceVariable() { result = v } +} + +private class DefVariableAddressImpl extends DefAddressImpl { + override BaseIRVariable v; + final override predicate hasIndexInBlock(IRBlock block, int index) { exists(IRVariable var | var = v.getIRVariable() | block.getInstruction(index) = getInitializationTargetAddress(var) @@ -353,15 +366,14 @@ private class DefAddressImpl extends DefImpl, TDefAddressImpl { index = 0 ) } +} - override Cpp::Location getLocation() { result = v.getIRVariable().getLocation() } +private class DefCallAddressImpl extends DefAddressImpl { + override BaseCallVariable v; - final override SourceVariable getSourceVariable() { - result.getBaseVariable() = v and - result.getIndirection() = 0 + final override predicate hasIndexInBlock(IRBlock block, int index) { + block.getInstruction(index) = v.getCallInstruction() } - - final override BaseSourceVariable getBaseSourceVariable() { result = v } } private class DirectDef extends DefImpl, TDirectDefImpl { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll index 65f1c57b80c3..52bb16b1f3c5 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll @@ -40,7 +40,8 @@ predicate ignoreInstruction(Instruction instr) { instr instanceof AliasedDefinitionInstruction or instr instanceof AliasedUseInstruction or instr instanceof InitializeNonLocalInstruction or - instr instanceof ReturnIndirectionInstruction + instr instanceof ReturnIndirectionInstruction or + instr instanceof UninitializedGroupInstruction ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/MemoryAccessKind.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/MemoryAccessKind.qll index 5e11a310e2fb..1017360c6d60 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/MemoryAccessKind.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/MemoryAccessKind.qll @@ -13,7 +13,8 @@ private newtype TMemoryAccessKind = TPhiMemoryAccess() or TUnmodeledMemoryAccess() or TChiTotalMemoryAccess() or - TChiPartialMemoryAccess() + TChiPartialMemoryAccess() or + TGroupedMemoryAccess() /** * Describes the set of memory locations memory accessed by a memory operand or @@ -99,3 +100,11 @@ class ChiTotalMemoryAccess extends MemoryAccessKind, TChiTotalMemoryAccess { class ChiPartialMemoryAccess extends MemoryAccessKind, TChiPartialMemoryAccess { override string toString() { result = "chi(partial)" } } + +/** + * The result of an `UninitializedGroup` instruction, which initializes a set of + * allocations that are each assigned the same virtual variable. + */ +class GroupedMemoryAccess extends MemoryAccessKind, TGroupedMemoryAccess { + override string toString() { result = "group" } +} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll index c473969467da..bd1ffcd5ce15 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll @@ -89,6 +89,7 @@ private newtype TOpcode = TSizedBufferMayWriteSideEffect() or TInitializeDynamicAllocation() or TChi() or + TUninitializedGroup() or TInlineAsm() or TUnreached() or TNewObj() @@ -1237,6 +1238,17 @@ module Opcode { } } + /** + * The `Opcode` for a `UninitializedGroup`. + * + * See the `UninitializedGroupInstruction` documentation for more details. + */ + class UninitializedGroup extends Opcode, TUninitializedGroup { + final override string toString() { result = "UninitializedGroup" } + + override GroupedMemoryAccess getWriteMemoryAccess() { any() } + } + /** * The `Opcode` for an `InlineAsmInstruction`. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll index c7e40da1e17c..af5dd4199858 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll @@ -2142,6 +2142,47 @@ class ChiInstruction extends Instruction { final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) } } +/** + * An instruction that initializes a set of allocations that are each assigned + * the same "virtual variable". + * + * As an example, consider the following snippet: + * ``` + * int a; + * int b; + * int* p; + * if(b) { + * p = &a; + * } else { + * p = &b; + * } + * *p = 5; + * int x = a; + * ``` + * + * Since both the address of `a` and `b` reach `p` at `*p = 5` the IR alias + * analysis will create a region that contains both `a` and `b`. The region + * containing both `a` and `b` are initialized by an `UninitializedGroup` + * instruction in the entry block of the enclosing function. + */ +class UninitializedGroupInstruction extends Instruction { + UninitializedGroupInstruction() { this.getOpcode() instanceof Opcode::UninitializedGroup } + + /** + * Gets an `IRVariable` whose memory is initialized by this instruction, if any. + * Note: Allocations that are not represented as `IRVariable`s (such as + * dynamic allocations) are not returned by this predicate even if this + * instruction initializes such memory. + */ + final IRVariable getAnIRVariable() { + result = Construction::getAnUninitializedGroupVariable(this) + } + + final override string getImmediateString() { + result = strictconcat(this.getAnIRVariable().toString(), ",") + } +} + /** * An instruction representing unreachable code. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll index 23a7c1e77fde..8f3493c1065f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll @@ -106,8 +106,7 @@ private predicate operandEscapesDomain(Operand operand) { not isArgumentForParameter(_, operand, _) and not isOnlyEscapesViaReturnArgument(operand) and not operand.getUse() instanceof ReturnValueInstruction and - not operand.getUse() instanceof ReturnIndirectionInstruction and - not operand instanceof PhiInputOperand + not operand.getUse() instanceof ReturnIndirectionInstruction } /** @@ -191,6 +190,11 @@ private predicate operandIsPropagated(Operand operand, IntValue bitOffset, Instr // A copy propagates the source value. operand = instr.(CopyInstruction).getSourceValueOperand() and bitOffset = 0 ) + or + operand = instr.(PhiInstruction).getAnInputOperand() and + // Using `unknown` ensures termination since we cannot keep incrementing a bit offset + // through the back edge of a loop (or through recursion). + bitOffset = Ints::unknown() } private predicate operandEscapesNonReturn(Operand operand) { @@ -212,9 +216,6 @@ private predicate operandEscapesNonReturn(Operand operand) { or isOnlyEscapesViaReturnArgument(operand) and resultEscapesNonReturn(operand.getUse()) or - operand instanceof PhiInputOperand and - resultEscapesNonReturn(operand.getUse()) - or operandEscapesDomain(operand) } @@ -236,9 +237,6 @@ private predicate operandMayReachReturn(Operand operand) { operand.getUse() instanceof ReturnValueInstruction or isOnlyEscapesViaReturnArgument(operand) and resultMayReachReturn(operand.getUse()) - or - operand instanceof PhiInputOperand and - resultMayReachReturn(operand.getUse()) } private predicate operandReturned(Operand operand, IntValue bitOffset) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll index 8cf69dec6ef8..ba2c1d5a22c0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasConfiguration.qll @@ -101,6 +101,8 @@ class IndirectParameterAllocation extends Allocation, TIndirectParameterAllocati final override predicate isAlwaysAllocatedOnStack() { none() } final override predicate alwaysEscapes() { none() } + + final IRAutomaticVariable getIRVariable() { result = var } } class DynamicAllocation extends Allocation, TDynamicAllocation { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index 10fddf6352ba..aba70f8771d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -8,6 +8,7 @@ private import semmle.code.cpp.ir.internal.IntegerConstant as Ints private import semmle.code.cpp.ir.internal.IntegerInterval as Interval private import semmle.code.cpp.ir.implementation.internal.OperandTag private import AliasConfiguration +private import codeql.util.Boolean private class IntValue = Ints::IntValue; @@ -16,49 +17,196 @@ private predicate isIndirectOrBufferMemoryAccess(MemoryAccessKind kind) { kind instanceof BufferMemoryAccess } +private predicate hasMemoryAccess( + AddressOperand addrOperand, Allocation var, IntValue startBitOffset, boolean grouped +) { + addressOperandAllocationAndOffset(addrOperand, var, startBitOffset) and + if strictcount(Allocation alloc | addressOperandAllocationAndOffset(addrOperand, alloc, _)) > 1 + then grouped = true + else grouped = false +} + private predicate hasResultMemoryAccess( - Instruction instr, Allocation var, IRType type, Language::LanguageType languageType, - IntValue startBitOffset, IntValue endBitOffset, boolean isMayAccess + AddressOperand address, Instruction instr, Allocation var, IRType type, + Language::LanguageType languageType, IntValue startBitOffset, IntValue endBitOffset, + boolean isMayAccess, boolean grouped ) { - exists(AddressOperand addrOperand | - addrOperand = instr.getResultAddressOperand() and - addressOperandAllocationAndOffset(addrOperand, var, startBitOffset) and - languageType = instr.getResultLanguageType() and - type = languageType.getIRType() and - isIndirectOrBufferMemoryAccess(instr.getResultMemoryAccess()) and - (if instr.hasResultMayMemoryAccess() then isMayAccess = true else isMayAccess = false) and - if exists(type.getByteSize()) - then endBitOffset = Ints::add(startBitOffset, Ints::mul(type.getByteSize(), 8)) - else endBitOffset = Ints::unknown() - ) + address = instr.getResultAddressOperand() and + hasMemoryAccess(address, var, startBitOffset, grouped) and + languageType = instr.getResultLanguageType() and + type = languageType.getIRType() and + isIndirectOrBufferMemoryAccess(instr.getResultMemoryAccess()) and + (if instr.hasResultMayMemoryAccess() then isMayAccess = true else isMayAccess = false) and + if exists(type.getByteSize()) + then endBitOffset = Ints::add(startBitOffset, Ints::mul(type.getByteSize(), 8)) + else endBitOffset = Ints::unknown() } private predicate hasOperandMemoryAccess( - MemoryOperand operand, Allocation var, IRType type, Language::LanguageType languageType, - IntValue startBitOffset, IntValue endBitOffset, boolean isMayAccess + AddressOperand address, MemoryOperand operand, Allocation var, IRType type, + Language::LanguageType languageType, IntValue startBitOffset, IntValue endBitOffset, + boolean isMayAccess, boolean grouped ) { - exists(AddressOperand addrOperand | - addrOperand = operand.getAddressOperand() and - addressOperandAllocationAndOffset(addrOperand, var, startBitOffset) and - languageType = operand.getLanguageType() and - type = languageType.getIRType() and - isIndirectOrBufferMemoryAccess(operand.getMemoryAccess()) and - (if operand.hasMayReadMemoryAccess() then isMayAccess = true else isMayAccess = false) and - if exists(type.getByteSize()) - then endBitOffset = Ints::add(startBitOffset, Ints::mul(type.getByteSize(), 8)) - else endBitOffset = Ints::unknown() + address = operand.getAddressOperand() and + hasMemoryAccess(address, var, startBitOffset, grouped) and + languageType = operand.getLanguageType() and + type = languageType.getIRType() and + isIndirectOrBufferMemoryAccess(operand.getMemoryAccess()) and + (if operand.hasMayReadMemoryAccess() then isMayAccess = true else isMayAccess = false) and + if exists(type.getByteSize()) + then endBitOffset = Ints::add(startBitOffset, Ints::mul(type.getByteSize(), 8)) + else endBitOffset = Ints::unknown() +} + +private Allocation getAnAllocation(AddressOperand address) { + hasResultMemoryAccess(address, _, result, _, _, _, _, _, true) or + hasOperandMemoryAccess(address, _, result, _, _, _, _, _, true) +} + +private module AllocationSet0 = + QlBuiltins::InternSets; + +/** + * A set of allocations containing at least 2 elements. + */ +private class NonSingletonSets extends AllocationSet0::Set { + NonSingletonSets() { strictcount(Allocation var | this.contains(var)) > 1 } + + /** Gets an allocation from this set. */ + Allocation getAnAllocation() { this.contains(result) } + + /** Gets the string representation of this set. */ + string toString() { result = "{" + strictconcat(this.getAnAllocation().toString(), ", ") + "}" } +} + +/** Holds the instersection of `s1` and `s2` is non-empty. */ +private predicate hasOverlappingElement(NonSingletonSets s1, NonSingletonSets s2) { + exists(Allocation var | + s1.contains(var) and + s2.contains(var) + ) +} + +private module AllocationSet = + QlBuiltins::EquivalenceRelation; + +/** + * Holds if `var` is created by the AST element `e`. Furthermore, the value `d` + * represents which branch of the `Allocation` type `var` is from. + */ +private predicate allocationAst(Allocation var, @element e, int d) { + var.(VariableAllocation).getIRVariable().getAst() = e and d = 0 + or + var.(IndirectParameterAllocation).getIRVariable().getAst() = e and d = 1 + or + var.(DynamicAllocation).getABaseInstruction().getAst() = e and d = 2 +} + +/** Holds if `x = y` and `x` is an AST element that creates an `Allocation`. */ +private predicate id(@element x, @element y) { + allocationAst(_, x, _) and + x = y +} + +private predicate idOf(@element x, int y) = equivalenceRelation(id/2)(x, y) + +/** Gets a unique integer representation of `var`. */ +private int getUniqueAllocationId(Allocation var) { + exists(int r, @element e, int d | + allocationAst(var, e, d) and + idOf(e, r) and + result = 3 * r + d ) } +/** + * An equivalence class of a set of allocations. + * + * Any `VariableGroup` will be completely disjunct from any other + * `VariableGroup`. + */ +class VariableGroup extends AllocationSet::EquivalenceClass { + /** Gets the location of this set. */ + final Location getLocation() { result = this.getIRFunction().getLocation() } + + /** Gets the enclosing `IRFunction` of this set. */ + final IRFunction getIRFunction() { + result = unique( | | this.getAnAllocation().getEnclosingIRFunction()) + } + + /** Gets the type of elements contained in this set. */ + final Language::LanguageType getType() { + strictcount(Language::LanguageType langType | + exists(Allocation var | var = this.getAnAllocation() | + hasResultMemoryAccess(_, _, var, _, langType, _, _, _, true) or + hasOperandMemoryAccess(_, _, var, _, langType, _, _, _, true) + ) + ) = 1 and + exists(Allocation var | var = this.getAnAllocation() | + hasResultMemoryAccess(_, _, var, _, result, _, _, _, true) or + hasOperandMemoryAccess(_, _, var, _, result, _, _, _, true) + ) + or + strictcount(Language::LanguageType langType | + exists(Allocation var | var = this.getAnAllocation() | + hasResultMemoryAccess(_, _, var, _, langType, _, _, _, true) or + hasOperandMemoryAccess(_, _, var, _, langType, _, _, _, true) + ) + ) > 1 and + result = any(IRUnknownType type).getCanonicalLanguageType() + } + + /** Gets an allocation of this set. */ + final Allocation getAnAllocation() { + exists(AllocationSet0::Set set | + this = AllocationSet::getEquivalenceClass(set) and + set.contains(result) + ) + } + + /** Gets a unique string representing this set. */ + final private string getUniqueId() { + result = strictconcat(getUniqueAllocationId(this.getAnAllocation()).toString(), ",") + } + + /** + * Gets the order that this set should be initialized in. + * + * Note: This is _not_ the order in which the _members_ of the set should be + * initialized. Rather, it represents the order in which the set should be + * initialized in relation to other sets. That is, if + * ``` + * getInitializationOrder() = 2 + * ``` + * then this set will be initialized as the second (third) set in the + * enclosing function. In order words, the third `UninitializedGroup` + * instruction in the entry block of the enclosing function will initialize + * this set of allocations. + */ + final int getInitializationOrder() { + exists(IRFunction func | + func = this.getIRFunction() and + this = + rank[result + 1](VariableGroup vg, string uniq | + vg.getIRFunction() = func and uniq = vg.getUniqueId() + | + vg order by uniq + ) + ) + } + + string toString() { result = "{" + strictconcat(this.getAnAllocation().toString(), ", ") + "}" } +} + private newtype TMemoryLocation = TVariableMemoryLocation( Allocation var, IRType type, Language::LanguageType languageType, IntValue startBitOffset, IntValue endBitOffset, boolean isMayAccess ) { ( - hasResultMemoryAccess(_, var, type, _, startBitOffset, endBitOffset, isMayAccess) + hasResultMemoryAccess(_, _, var, type, _, startBitOffset, endBitOffset, isMayAccess, false) or - hasOperandMemoryAccess(_, var, type, _, startBitOffset, endBitOffset, isMayAccess) + hasOperandMemoryAccess(_, _, var, type, _, startBitOffset, endBitOffset, isMayAccess, false) or // For a stack variable, always create a memory location for the entire variable. var.isAlwaysAllocatedOnStack() and @@ -69,22 +217,14 @@ private newtype TMemoryLocation = ) and languageType = type.getCanonicalLanguageType() } or - TEntireAllocationMemoryLocation(Allocation var, boolean isMayAccess) { - ( - var instanceof IndirectParameterAllocation or - var instanceof DynamicAllocation - ) and - (isMayAccess = false or isMayAccess = true) - } or - TUnknownMemoryLocation(IRFunction irFunc, boolean isMayAccess) { - isMayAccess = false or isMayAccess = true - } or - TAllNonLocalMemory(IRFunction irFunc, boolean isMayAccess) { - isMayAccess = false or isMayAccess = true + TEntireAllocationMemoryLocation(Allocation var, Boolean isMayAccess) { + var instanceof IndirectParameterAllocation or + var instanceof DynamicAllocation } or - TAllAliasedMemory(IRFunction irFunc, boolean isMayAccess) { - isMayAccess = false or isMayAccess = true - } + TGroupedMemoryLocation(VariableGroup vg, Boolean isMayAccess, Boolean isAll) or + TUnknownMemoryLocation(IRFunction irFunc, Boolean isMayAccess) or + TAllNonLocalMemory(IRFunction irFunc, Boolean isMayAccess) or + TAllAliasedMemory(IRFunction irFunc, Boolean isMayAccess) /** * Represents the memory location accessed by a memory operand or memory result. In this implementation, the location is @@ -116,7 +256,14 @@ abstract class MemoryLocation extends TMemoryLocation { abstract predicate isMayAccess(); - Allocation getAllocation() { none() } + /** + * Gets an allocation associated with this `MemoryLocation`. + * + * This returns zero or one results in all cases except when `this` is an + * instance of `GroupedMemoryLocation`. When `this` is an instance of + * `GroupedMemoryLocation` this predicate always returns two or more results. + */ + Allocation getAnAllocation() { none() } /** * Holds if the location cannot be overwritten except by definition of a `MemoryLocation` for @@ -153,24 +300,29 @@ abstract class AllocationMemoryLocation extends MemoryLocation { Allocation var; boolean isMayAccess; - AllocationMemoryLocation() { - this instanceof TMemoryLocation and - isMayAccess = false - or - isMayAccess = true // Just ensures that `isMayAccess` is bound. - } + bindingset[isMayAccess] + AllocationMemoryLocation() { any() } final override VirtualVariable getVirtualVariable() { if allocationEscapes(var) then result = TAllAliasedMemory(var.getEnclosingIRFunction(), false) - else result.(AllocationMemoryLocation).getAllocation() = var + else ( + // It may be that the grouped memory location contains an escaping + // allocation. In that case, the virtual variable is still the memory + // location that represents all aliased memory. Thus, we need to + // call `getVirtualVariable` on the grouped memory location. + result = getGroupedMemoryLocation(var, false, false).getVirtualVariable() + or + not exists(getGroupedMemoryLocation(var, false, false)) and + result.(AllocationMemoryLocation).getAnAllocation() = var + ) } final override IRFunction getIRFunction() { result = var.getEnclosingIRFunction() } final override Location getLocation() { result = var.getLocation() } - final override Allocation getAllocation() { result = var } + final override Allocation getAnAllocation() { result = var } final override predicate isMayAccess() { isMayAccess = true } @@ -211,13 +363,13 @@ class VariableMemoryLocation extends TVariableMemoryLocation, AllocationMemoryLo final override Language::LanguageType getType() { if strictcount(Language::LanguageType accessType | - hasResultMemoryAccess(_, var, type, accessType, startBitOffset, endBitOffset, _) or - hasOperandMemoryAccess(_, var, type, accessType, startBitOffset, endBitOffset, _) + hasResultMemoryAccess(_, _, var, type, accessType, startBitOffset, endBitOffset, _, false) or + hasOperandMemoryAccess(_, _, var, type, accessType, startBitOffset, endBitOffset, _, false) ) = 1 then // All of the accesses have the same `LanguageType`, so just use that. - hasResultMemoryAccess(_, var, type, result, startBitOffset, endBitOffset, _) or - hasOperandMemoryAccess(_, var, type, result, startBitOffset, endBitOffset, _) + hasResultMemoryAccess(_, _, var, type, result, startBitOffset, endBitOffset, _, false) or + hasOperandMemoryAccess(_, _, var, type, result, startBitOffset, endBitOffset, _, false) else // There is no single type for all accesses, so just use the canonical one for this `IRType`. result = type.getCanonicalLanguageType() @@ -247,6 +399,89 @@ class VariableMemoryLocation extends TVariableMemoryLocation, AllocationMemoryLo } } +/** + * A group of allocations represented as a single memory location. + * + * If `isAll()` holds then this memory location represents all the enclosing + * allocations, and if `isSome()` holds then this memory location represents + * one or more of the enclosing allocations. + * + * For example, consider the following snippet: + * ``` + * int* p; + * int a, b; + * if(b) { + * p = &a; + * } else { + * p = &b; + * } + * *p = 42; + * ``` + * + * The write memory location associated with the write to `*p` writes to a + * grouped memory location representing the _some_ allocation in the set + * `{a, b}`, and the subsequent `Chi` instruction merges the new value of + * `{a, b}` into a memory location that represents _all_ of the allocations + * in the set. + */ +class GroupedMemoryLocation extends TGroupedMemoryLocation, MemoryLocation { + VariableGroup vg; + boolean isMayAccess; + boolean isAll; + + GroupedMemoryLocation() { this = TGroupedMemoryLocation(vg, isMayAccess, isAll) } + + final override Location getLocation() { result = vg.getLocation() } + + final override IRFunction getIRFunction() { result = vg.getIRFunction() } + + final override predicate isMayAccess() { isMayAccess = true } + + final override string getUniqueId() { + if this.isAll() + then result = "All{" + strictconcat(vg.getAnAllocation().getUniqueId(), ", ") + "}" + else result = "Some{" + strictconcat(vg.getAnAllocation().getUniqueId(), ", ") + "}" + } + + final override string toStringInternal() { result = this.getUniqueId() } + + final override Language::LanguageType getType() { result = vg.getType() } + + final override VirtualVariable getVirtualVariable() { + if allocationEscapes(this.getAnAllocation()) + then result = TAllAliasedMemory(vg.getIRFunction(), false) + else result = TGroupedMemoryLocation(vg, false, true) + } + + /** Gets an allocation of this memory location. */ + override Allocation getAnAllocation() { result = vg.getAnAllocation() } + + /** Gets the set of allocations associated with this memory location. */ + VariableGroup getGroup() { result = vg } + + /** Holds if this memory location represents all the enclosing allocations. */ + predicate isAll() { isAll = true } + + /** Holds if this memory location represents one or more of the enclosing allocations. */ + predicate isSome() { isAll = false } +} + +private GroupedMemoryLocation getGroupedMemoryLocation( + Allocation alloc, boolean isMayAccess, boolean isAll +) { + result.getAnAllocation() = alloc and + ( + isMayAccess = true and result.isMayAccess() + or + isMayAccess = false and not result.isMayAccess() + ) and + ( + isAll = true and result.isAll() + or + isAll = false and result.isSome() + ) +} + class EntireAllocationMemoryLocation extends TEntireAllocationMemoryLocation, AllocationMemoryLocation { @@ -282,6 +517,14 @@ class VariableVirtualVariable extends VariableMemoryLocation, VirtualVariable { } } +class GroupedVirtualVariable extends GroupedMemoryLocation, VirtualVariable { + GroupedVirtualVariable() { + forex(Allocation var | var = this.getAnAllocation() | not allocationEscapes(var)) and + not this.isMayAccess() and + this.isAll() + } +} + /** * An access to memory that is not known to be confined to a specific `IRVariable`. */ @@ -446,7 +689,7 @@ private Overlap getExtentOverlap(MemoryLocation def, MemoryLocation use) { result instanceof MustExactlyOverlap or not use instanceof EntireAllocationMemoryLocation and - if def.getAllocation() = use.getAllocation() + if def.getAnAllocation() = use.getAnAllocation() then // EntireAllocationMemoryLocation totally overlaps any location within // the same allocation. @@ -454,11 +697,48 @@ private Overlap getExtentOverlap(MemoryLocation def, MemoryLocation use) { else ( // There is no overlap with a location that's known to belong to a // different allocation, but all other locations may partially overlap. - not exists(use.getAllocation()) and + not exists(use.getAnAllocation()) and result instanceof MayPartiallyOverlap ) ) or + exists(GroupedMemoryLocation group | + group = def and + def.getVirtualVariable() = use.getVirtualVariable() + | + ( + use instanceof UnknownMemoryLocation or + use instanceof AllAliasedMemory + ) and + result instanceof MayPartiallyOverlap + or + group.isAll() and + ( + group.getAnAllocation() = + [ + use.(EntireAllocationMemoryLocation).getAnAllocation(), + use.(VariableMemoryLocation).getAnAllocation() + ] + or + use.(GroupedMemoryLocation).isSome() + ) and + result instanceof MustTotallyOverlap + or + group.isAll() and + use.(GroupedMemoryLocation).isAll() and + result instanceof MustExactlyOverlap + or + group.isSome() and + ( + use instanceof EntireAllocationMemoryLocation + or + use instanceof VariableMemoryLocation + or + use instanceof GroupedMemoryLocation + ) and + result instanceof MayPartiallyOverlap + ) + or exists(VariableMemoryLocation defVariableLocation | defVariableLocation = def and ( @@ -468,7 +748,8 @@ private Overlap getExtentOverlap(MemoryLocation def, MemoryLocation use) { ( use instanceof UnknownMemoryLocation or use instanceof AllAliasedMemory or - use instanceof EntireAllocationMemoryLocation + use instanceof EntireAllocationMemoryLocation or + use instanceof GroupedMemoryLocation ) and result instanceof MayPartiallyOverlap or @@ -534,7 +815,7 @@ private predicate isCoveredOffset(Allocation var, int offsetRank, VariableMemory exists(int startRank, int endRank, VirtualVariable vvar | vml.getStartBitOffset() = rank[startRank](IntValue offset_ | isRelevantOffset(vvar, offset_)) and vml.getEndBitOffset() = rank[endRank](IntValue offset_ | isRelevantOffset(vvar, offset_)) and - var = vml.getAllocation() and + var = vml.getAnAllocation() and vvar = vml.getVirtualVariable() and isRelatableMemoryLocation(vml) and offsetRank in [startRank .. endRank] @@ -542,7 +823,7 @@ private predicate isCoveredOffset(Allocation var, int offsetRank, VariableMemory } private predicate hasUnknownOffset(Allocation var, VariableMemoryLocation vml) { - vml.getAllocation() = var and + vml.getAnAllocation() = var and ( vml.getStartBitOffset() = Ints::unknown() or vml.getEndBitOffset() = Ints::unknown() @@ -557,9 +838,9 @@ private predicate overlappingIRVariableMemoryLocations( isCoveredOffset(var, offsetRank, use) ) or - hasUnknownOffset(use.getAllocation(), def) + hasUnknownOffset(use.getAnAllocation(), def) or - hasUnknownOffset(def.getAllocation(), use) + hasUnknownOffset(def.getAnAllocation(), use) } private Overlap getVariableMemoryLocationOverlap( @@ -588,13 +869,24 @@ MemoryLocation getResultMemoryLocation(Instruction instr) { ( ( isIndirectOrBufferMemoryAccess(kind) and - if hasResultMemoryAccess(instr, _, _, _, _, _, _) + if hasResultMemoryAccess(_, instr, _, _, _, _, _, _, _) then - exists(Allocation var, IRType type, IntValue startBitOffset, IntValue endBitOffset | - hasResultMemoryAccess(instr, var, type, _, startBitOffset, endBitOffset, isMayAccess) and - result = - TVariableMemoryLocation(var, type, _, startBitOffset, endBitOffset, - unbindBool(isMayAccess)) + exists( + Allocation var, IRType type, IntValue startBitOffset, IntValue endBitOffset, + boolean grouped + | + hasResultMemoryAccess(_, instr, var, type, _, startBitOffset, endBitOffset, isMayAccess, + grouped) + | + // If the instruction is only associated with one allocation we assign it a `VariableMemoryLocation` + if grouped = false + then + result = + TVariableMemoryLocation(var, type, _, startBitOffset, endBitOffset, + unbindBool(isMayAccess)) + else + // And otherwise we assign it a memory location that groups all the relevant memory locations into one. + result = getGroupedMemoryLocation(var, unbindBool(isMayAccess), false) ) else result = TUnknownMemoryLocation(instr.getEnclosingIRFunction(), isMayAccess) ) @@ -621,12 +913,23 @@ MemoryLocation getOperandMemoryLocation(MemoryOperand operand) { ( ( isIndirectOrBufferMemoryAccess(kind) and - if hasOperandMemoryAccess(operand, _, _, _, _, _, _) + if hasOperandMemoryAccess(_, operand, _, _, _, _, _, _, _) then - exists(Allocation var, IRType type, IntValue startBitOffset, IntValue endBitOffset | - hasOperandMemoryAccess(operand, var, type, _, startBitOffset, endBitOffset, isMayAccess) and - result = - TVariableMemoryLocation(var, type, _, startBitOffset, endBitOffset, isMayAccess) + exists( + Allocation var, IRType type, IntValue startBitOffset, IntValue endBitOffset, + boolean grouped + | + hasOperandMemoryAccess(_, operand, var, type, _, startBitOffset, endBitOffset, + isMayAccess, grouped) + | + // If the operand is only associated with one memory location we assign it a `VariableMemoryLocation` + if grouped = false + then + result = + TVariableMemoryLocation(var, type, _, startBitOffset, endBitOffset, isMayAccess) + else + // And otherwise we assign it a memory location that groups all relevant memory locations into one. + result = getGroupedMemoryLocation(var, isMayAccess, false) ) else result = TUnknownMemoryLocation(operand.getEnclosingIRFunction(), isMayAccess) ) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll index d2e68c733041..819f3906b825 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll @@ -15,6 +15,51 @@ private class OldInstruction = Reachability::ReachableInstruction; import Cached +/** + * Holds if `instruction` is the first instruction that may be followed by + * an `UninitializedGroup` instruction, and the enclosing function of + * `instruction` is `func`. + */ +private predicate isFirstInstructionBeforeUninitializedGroup( + Instruction instruction, IRFunction func +) { + instruction = getChi(any(OldIR::InitializeNonLocalInstruction init)) and + func = instruction.getEnclosingIRFunction() +} + +/** Gets the `i`'th `UninitializedGroup` instruction in `func`. */ +private UninitializedGroupInstruction getInitGroupInstruction(int i, IRFunction func) { + exists(Alias::VariableGroup vg | + vg.getIRFunction() = func and + vg.getInitializationOrder() = i and + result = uninitializedGroup(vg) + ) +} + +/** + * Holds if `instruction` is the last instruction in the chain of `UninitializedGroup` + * instructions in `func`. The chain of instructions may be empty in which case + * `instruction` satisfies + * ``` + * isFirstInstructionBeforeUninitializedGroup(instruction, func) + * ``` + */ +predicate isLastInstructionForUninitializedGroups(Instruction instruction, IRFunction func) { + exists(int i | + instruction = getInitGroupInstruction(i, func) and + not exists(getChi(instruction)) and + not exists(getInitGroupInstruction(i + 1, func)) + ) + or + exists(int i | + instruction = getChi(getInitGroupInstruction(i, func)) and + not exists(getInitGroupInstruction(i + 1, func)) + ) + or + isFirstInstructionBeforeUninitializedGroup(instruction, func) and + not exists(getInitGroupInstruction(0, func)) +} + cached private module Cached { cached @@ -32,6 +77,11 @@ private module Cached { hasChiNode(_, primaryInstruction) } + cached + predicate hasChiNodeAfterUninitializedGroup(UninitializedGroupInstruction initGroup) { + hasChiNodeAfterUninitializedGroup(_, initGroup) + } + cached predicate hasUnreachedInstructionCached(IRFunction irFunc) { exists(OldIR::Instruction oldInstruction | @@ -45,7 +95,8 @@ private module Cached { } class TStageInstruction = - TRawInstruction or TPhiInstruction or TChiInstruction or TUnreachedInstruction; + TRawInstruction or TPhiInstruction or TChiInstruction or TUnreachedInstruction or + TUninitializedGroupInstruction; /** * If `oldInstruction` is a `Phi` instruction that has exactly one reachable predecessor block, @@ -78,6 +129,8 @@ private module Cached { or instr instanceof TChiInstruction or + instr instanceof TUninitializedGroupInstruction + or instr instanceof TUnreachedInstruction } @@ -123,7 +176,8 @@ private module Cached { predicate hasModeledMemoryResult(Instruction instruction) { canModelResultForOldInstruction(getOldInstruction(instruction)) or instruction instanceof PhiInstruction or // Phis always have modeled results - instruction instanceof ChiInstruction // Chis always have modeled results + instruction instanceof ChiInstruction or // Chis always have modeled results + instruction instanceof UninitializedGroupInstruction // Group initializers always have modeled results } cached @@ -134,16 +188,23 @@ private module Cached { or // Chi instructions track virtual variables, and therefore a chi instruction is // conflated if it's associated with the aliased virtual variable. - exists(OldInstruction oldInstruction | instruction = getChi(oldInstruction) | - Alias::getResultMemoryLocation(oldInstruction).getVirtualVariable() instanceof + exists(Instruction input | instruction = getChi(input) | + Alias::getResultMemoryLocation(input).getVirtualVariable() instanceof Alias::AliasedVirtualVariable + or + // A chi following an `UninitializedGroupInstruction` only happens when the virtual + // variable of the grouped memory location is `{AllAliasedMemory}`. + exists(Alias::GroupedMemoryLocation gml | + input = uninitializedGroup(gml.getGroup()) and + gml.getVirtualVariable() instanceof Alias::AliasedVirtualVariable + ) ) or // Phi instructions track locations, and therefore a phi instruction is // conflated if it's associated with a conflated location. exists(Alias::MemoryLocation location | instruction = getPhi(_, location) and - not exists(location.getAllocation()) + not exists(location.getAnAllocation()) ) } @@ -205,7 +266,11 @@ private module Cached { hasMemoryOperandDefinition(oldInstruction, oldOperand, overlap, result) ) or - instruction = getChi(getOldInstruction(result)) and + ( + instruction = getChi(getOldInstruction(result)) + or + instruction = getChi(result.(UninitializedGroupInstruction)) + ) and tag instanceof ChiPartialOperandTag and overlap instanceof MustExactlyOverlap or @@ -263,6 +328,14 @@ private module Cached { ) } + cached + IRVariable getAnUninitializedGroupVariable(UninitializedGroupInstruction init) { + exists(Alias::VariableGroup vg | + init = uninitializedGroup(vg) and + result = vg.getAnAllocation().getABaseInstruction().(VariableInstruction).getIRVariable() + ) + } + /** * Holds if `instr` is part of a cycle in the operand graph that doesn't go * through a phi instruction and therefore should be impossible. @@ -316,6 +389,19 @@ private module Cached { result = getNewPhiOperandDefinitionFromOldSsa(instr, newPredecessorBlock, overlap) } + private ChiInstruction getChiAfterUninitializedGroup(int i, IRFunction func) { + result = + rank[i + 1](VariableGroup vg, UninitializedGroupInstruction initGroup, ChiInstruction chi, + int r | + initGroup.getEnclosingIRFunction() = func and + chi = getChi(initGroup) and + initGroup = uninitializedGroup(vg) and + r = vg.getInitializationOrder() + | + chi order by r + ) + } + cached Instruction getChiInstructionTotalOperand(ChiInstruction chiInstr) { exists( @@ -329,6 +415,19 @@ private module Cached { definitionReachesUse(vvar, defBlock, defRank, useBlock, useRank) and result = getDefinitionOrChiInstruction(defBlock, defOffset, vvar, _) ) + or + exists(UninitializedGroupInstruction initGroup, IRFunction func | + chiInstr = getChi(initGroup) and + func = initGroup.getEnclosingIRFunction() + | + chiInstr = getChiAfterUninitializedGroup(0, func) and + isFirstInstructionBeforeUninitializedGroup(result, func) + or + exists(int i | + chiInstr = getChiAfterUninitializedGroup(i + 1, func) and + result = getChiAfterUninitializedGroup(i, func) + ) + ) } cached @@ -344,14 +443,40 @@ private module Cached { ) } - /* - * This adds Chi nodes to the instruction successor relation; if an instruction has a Chi node, - * that node is its successor in the new successor relation, and the Chi node's successors are - * the new instructions generated from the successors of the old instruction - */ + private UninitializedGroupInstruction firstInstructionToUninitializedGroup( + Instruction instruction, EdgeKind kind + ) { + exists(IRFunction func | + isFirstInstructionBeforeUninitializedGroup(instruction, func) and + result = getInitGroupInstruction(0, func) and + kind instanceof GotoEdge + ) + } - cached - Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { + private Instruction getNextUninitializedGroupInstruction(Instruction instruction, EdgeKind kind) { + exists(int i, IRFunction func | + func = instruction.getEnclosingIRFunction() and + instruction = getInitGroupInstruction(i, func) and + kind instanceof GotoEdge + | + if hasChiNodeAfterUninitializedGroup(_, instruction) + then result = getChi(instruction) + else result = getInitGroupInstruction(i + 1, func) + ) + or + exists(int i, IRFunction func, UninitializedGroupInstruction initGroup | + func = instruction.getEnclosingIRFunction() and + instruction = getChi(initGroup) and + initGroup = getInitGroupInstruction(i, func) and + kind instanceof GotoEdge + | + result = getInitGroupInstruction(i + 1, func) + ) + } + + private Instruction getInstructionSuccessorAfterUninitializedGroup0( + Instruction instruction, EdgeKind kind + ) { if hasChiNode(_, getOldInstruction(instruction)) then result = getChi(getOldInstruction(instruction)) and @@ -371,6 +496,107 @@ private module Cached { ) } + private Instruction getInstructionSuccessorAfterUninitializedGroup( + Instruction instruction, EdgeKind kind + ) { + exists(IRFunction func, Instruction firstBeforeUninitializedGroup | + isLastInstructionForUninitializedGroups(instruction, func) and + isFirstInstructionBeforeUninitializedGroup(firstBeforeUninitializedGroup, func) and + result = getInstructionSuccessorAfterUninitializedGroup0(firstBeforeUninitializedGroup, kind) + ) + } + + /** + * This adds Chi nodes to the instruction successor relation; if an instruction has a Chi node, + * that node is its successor in the new successor relation, and the Chi node's successors are + * the new instructions generated from the successors of the old instruction. + * + * Furthermore, the entry block is augmented with `UninitializedGroup` instructions and `Chi` + * instructions. For example, consider this example: + * ```cpp + * int x, y; + * int* p; + * if(b) { + * p = &x; + * escape(&x); + * } else { + * p = &y; + * } + * *p = 42; + * + * int z, w; + * int* q; + * if(b) { + * q = &z; + * } else { + * q = &w; + * } + * *q = 43; + * ``` + * + * the unaliased IR for the entry block of this snippet is: + * ``` + * v1(void) = EnterFunction : + * m1(unknown) = AliasedDefinition : + * m2(unknown) = InitializeNonLocal : + * r1(glval) = VariableAddress[b] : + * m3(bool) = InitializeParameter[b] : &:r1 + * r2(glval) = VariableAddress[x] : + * m4(int) = Uninitialized[x] : &:r2 + * r3(glval) = VariableAddress[y] : + * m5(int) = Uninitialized[y] : &:r3 + * r4(glval) = VariableAddress[p] : + * m6(int *) = Uninitialized[p] : &:r4 + * r5(glval) = VariableAddress[b] : + * r6(bool) = Load[b] : &:r5, m3 + * v2(void) = ConditionalBranch : r6 + * ``` + * and we need to transform this to aliased IR by inserting an `UninitializedGroup` + * instruction for every `VariableGroup` memory location in the function. Furthermore, + * if the `VariableGroup` memory location contains an allocation that escapes we need + * to insert a `Chi` that writes the memory produced by `UninitializedGroup` into + * `{AllAliasedMemory}`. For the above snippet we then end up with: + * ``` + * v1(void) = EnterFunction : + * m2(unknown) = AliasedDefinition : + * m3(unknown) = InitializeNonLocal : + * m4(unknown) = Chi : total:m2, partial:m3 + * m5(int) = UninitializedGroup[x,y] : + * m6(unknown) = Chi : total:m4, partial:m5 + * m7(int) = UninitializedGroup[w,z] : + * r1(glval) = VariableAddress[b] : + * m8(bool) = InitializeParameter[b] : &:r1 + * r2(glval) = VariableAddress[x] : + * m10(int) = Uninitialized[x] : &:r2 + * m11(unknown) = Chi : total:m6, partial:m10 + * r3(glval) = VariableAddress[y] : + * m12(int) = Uninitialized[y] : &:r3 + * m13(unknown) = Chi : total:m11, partial:m12 + * r4(glval) = VariableAddress[p] : + * m14(int *) = Uninitialized[p] : &:r4 + * r5(glval) = VariableAddress[b] : + * r6(bool) = Load[b] : &:r5, m8 + * v2(void) = ConditionalBranch : r6 + * ``` + * + * Here, the group `{x, y}` contains an allocation that escapes (`x`), so there + * is a `Chi` after the `UninitializedGroup` that initializes the memory for the + * `VariableGroup` containing `x`. None of the allocations in `{w, z}` escape so + * there is no `Chi` following that the `UninitializedGroup` that initializes the + * memory of `{w, z}`. + */ + cached + Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { + result = firstInstructionToUninitializedGroup(instruction, kind) + or + result = getNextUninitializedGroupInstruction(instruction, kind) + or + result = getInstructionSuccessorAfterUninitializedGroup(instruction, kind) + or + not isFirstInstructionBeforeUninitializedGroup(instruction, _) and + result = getInstructionSuccessorAfterUninitializedGroup0(instruction, kind) + } + cached Instruction getInstructionBackEdgeSuccessor(Instruction instruction, EdgeKind kind) { exists(OldInstruction oldInstruction | @@ -406,6 +632,16 @@ private module Cached { exists(IRFunctionBase irFunc | instr = unreachedInstruction(irFunc) and result = irFunc.getFunction() ) + or + exists(Alias::VariableGroup vg | + instr = uninitializedGroup(vg) and + result = vg.getIRFunction().getFunction() + ) + or + exists(UninitializedGroupInstruction initGroup | + instr = chiInstruction(initGroup) and + result = getInstructionAst(initGroup) + ) } cached @@ -418,9 +654,16 @@ private module Cached { ) or exists(Instruction primaryInstr, Alias::VirtualVariable vvar | - instr = chiInstruction(primaryInstr) and - hasChiNode(vvar, primaryInstr) and - result = vvar.getType() + instr = chiInstruction(primaryInstr) and result = vvar.getType() + | + hasChiNode(vvar, primaryInstr) + or + hasChiNodeAfterUninitializedGroup(vvar, primaryInstr) + ) + or + exists(Alias::VariableGroup vg | + instr = uninitializedGroup(vg) and + result = vg.getType() ) or instr = reusedPhiInstruction(_) and @@ -448,6 +691,8 @@ private module Cached { or instr = chiInstruction(_) and opcode instanceof Opcode::Chi or + instr = uninitializedGroup(_) and opcode instanceof Opcode::UninitializedGroup + or instr = unreachedInstruction(_) and opcode instanceof Opcode::Unreached } @@ -460,10 +705,15 @@ private module Cached { result = blockStartInstr.getEnclosingIRFunction() ) or - exists(OldInstruction primaryInstr | + exists(Instruction primaryInstr | instr = chiInstruction(primaryInstr) and result = primaryInstr.getEnclosingIRFunction() ) or + exists(Alias::VariableGroup vg | + instr = uninitializedGroup(vg) and + result = vg.getIRFunction() + ) + or instr = unreachedInstruction(result) } @@ -478,6 +728,8 @@ private module Cached { instruction = getChi(oldInstruction) and result = getNewInstruction(oldInstruction) ) + or + instruction = getChi(result.(UninitializedGroupInstruction)) } } @@ -485,7 +737,7 @@ private Instruction getNewInstruction(OldInstruction instr) { getOldInstruction( private OldInstruction getOldInstruction(Instruction instr) { instr = result } -private ChiInstruction getChi(OldInstruction primaryInstr) { result = chiInstruction(primaryInstr) } +private ChiInstruction getChi(Instruction primaryInstr) { result = chiInstruction(primaryInstr) } private PhiInstruction getPhi(OldBlock defBlock, Alias::MemoryLocation defLocation) { result = phiInstruction(defBlock.getFirstInstruction(), defLocation) @@ -506,6 +758,16 @@ private predicate hasChiNode(Alias::VirtualVariable vvar, OldInstruction def) { ) } +private predicate hasChiNodeAfterUninitializedGroup( + Alias::AliasedVirtualVariable vvar, UninitializedGroupInstruction initGroup +) { + exists(Alias::GroupedMemoryLocation defLocation | + initGroup = uninitializedGroup(defLocation.getGroup()) and + defLocation.getVirtualVariable() = vvar and + Alias::getOverlap(defLocation, vvar) instanceof MayPartiallyOverlap + ) +} + private import PhiInsertion /** @@ -668,19 +930,33 @@ private import DefUse * potentially very sparse. */ module DefUse { + bindingset[index, block] + pragma[inline_late] + private int getNonChiOffset(int index, OldBlock block) { + exists(IRFunction func | func = block.getEnclosingIRFunction() | + if + getNewBlock(block) = func.getEntryBlock() and + not block.getInstruction(index) instanceof InitializeNonLocalInstruction and + not block.getInstruction(index) instanceof AliasedDefinitionInstruction + then result = 2 * (index + count(VariableGroup vg | vg.getIRFunction() = func)) + else result = 2 * index + ) + } + + bindingset[index, block] + pragma[inline_late] + private int getChiOffset(int index, OldBlock block) { result = getNonChiOffset(index, block) + 1 } + /** * Gets the `Instruction` for the definition at offset `defOffset` in block `defBlock`. */ - Instruction getDefinitionOrChiInstruction( + private Instruction getDefinitionOrChiInstruction0( OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, Alias::MemoryLocation actualDefLocation ) { - exists(OldInstruction oldInstr, int oldOffset | - oldInstr = defBlock.getInstruction(oldOffset) and - oldOffset >= 0 - | + exists(OldInstruction oldInstr, int oldOffset | oldInstr = defBlock.getInstruction(oldOffset) | // An odd offset corresponds to the `Chi` instruction. - defOffset = oldOffset * 2 + 1 and + defOffset = getChiOffset(oldOffset, defBlock) and result = getChi(oldInstr) and ( defLocation = Alias::getResultMemoryLocation(oldInstr) or @@ -689,7 +965,7 @@ module DefUse { actualDefLocation = defLocation.getVirtualVariable() or // An even offset corresponds to the original instruction. - defOffset = oldOffset * 2 and + defOffset = getNonChiOffset(oldOffset, defBlock) and result = getNewInstruction(oldInstr) and ( defLocation = Alias::getResultMemoryLocation(oldInstr) or @@ -702,6 +978,54 @@ module DefUse { hasDefinition(_, defLocation, defBlock, defOffset) and result = getPhi(defBlock, defLocation) and actualDefLocation = defLocation + or + exists( + Alias::VariableGroup vg, int index, UninitializedGroupInstruction initGroup, + Alias::GroupedMemoryLocation gml + | + // Add 3 to account for the function prologue: + // v1(void) = EnterFunction + // m1(unknown) = AliasedDefinition + // m2(unknown) = InitializeNonLocal + index = 3 + vg.getInitializationOrder() and + not gml.isMayAccess() and + gml.isSome() and + gml.getGroup() = vg and + vg.getIRFunction().getEntryBlock() = defBlock and + initGroup = uninitializedGroup(vg) and + (defLocation = gml or defLocation = gml.getVirtualVariable()) + | + result = initGroup and + defOffset = 2 * index and + actualDefLocation = defLocation + or + result = getChi(initGroup) and + defOffset = 2 * index + 1 and + actualDefLocation = defLocation.getVirtualVariable() + ) + } + + private ChiInstruction remapGetDefinitionOrChiInstruction(Instruction oldResult) { + exists(IRFunction func | + isFirstInstructionBeforeUninitializedGroup(oldResult, func) and + isLastInstructionForUninitializedGroups(result, func) + ) + } + + Instruction getDefinitionOrChiInstruction( + OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, + Alias::MemoryLocation actualDefLocation + ) { + exists(Instruction oldResult | + oldResult = + getDefinitionOrChiInstruction0(defBlock, defOffset, defLocation, actualDefLocation) and + ( + result = remapGetDefinitionOrChiInstruction(oldResult) + or + not exists(remapGetDefinitionOrChiInstruction(oldResult)) and + result = oldResult + ) + ) } /** @@ -842,8 +1166,20 @@ module DefUse { block.getInstruction(index) = def and overlap = Alias::getOverlap(defLocation, useLocation) and if overlap instanceof MayPartiallyOverlap - then offset = (index * 2) + 1 // The use will be connected to the definition on the `Chi` instruction. - else offset = index * 2 // The use will be connected to the definition on the original instruction. + then offset = getChiOffset(index, block) // The use will be connected to the definition on the `Chi` instruction. + else offset = getNonChiOffset(index, block) // The use will be connected to the definition on the original instruction. + ) + or + exists(UninitializedGroupInstruction initGroup, int index, Overlap overlap, VariableGroup vg | + initGroup.getEnclosingIRFunction().getEntryBlock() = getNewBlock(block) and + vg = defLocation.(Alias::GroupedMemoryLocation).getGroup() and + // EnterFunction + AliasedDefinition + InitializeNonLocal + index + index = 3 + vg.getInitializationOrder() and + initGroup = uninitializedGroup(vg) and + overlap = Alias::getOverlap(defLocation, useLocation) and + if overlap instanceof MayPartiallyOverlap and hasChiNodeAfterUninitializedGroup(initGroup) + then offset = 2 * index + 1 // The use will be connected to the definition on the `Chi` instruction. + else offset = 2 * index // The use will be connected to the definition on the original instruction. ) } @@ -904,10 +1240,11 @@ module DefUse { block.getInstruction(index) = use and ( // A direct use of the location. - useLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and offset = index * 2 + useLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and + offset = getNonChiOffset(index, block) or // A `Chi` instruction will include a use of the virtual variable. - hasChiNode(useLocation, use) and offset = (index * 2) + 1 + hasChiNode(useLocation, use) and offset = getChiOffset(index, block) ) ) } @@ -1057,5 +1394,9 @@ module Ssa { predicate hasChiInstruction = Cached::hasChiInstructionCached/1; + predicate hasChiNodeAfterUninitializedGroup = Cached::hasChiNodeAfterUninitializedGroup/1; + predicate hasUnreachedInstruction = Cached::hasUnreachedInstructionCached/1; + + class VariableGroup = Alias::VariableGroup; } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll index bb3eb683653c..72ff5485a523 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll @@ -31,6 +31,7 @@ newtype TInstruction = TUnaliasedSsaUnreachedInstruction(IRFunctionBase irFunc) { UnaliasedSsa::Ssa::hasUnreachedInstruction(irFunc) } or + TUnaliasedSsaUninitializedGroupInstruction(UnaliasedSsa::Ssa::VariableGroup vg) or TAliasedSsaPhiInstruction( TRawInstruction blockStartInstr, AliasedSsa::Ssa::MemoryLocation memoryLocation ) { @@ -41,6 +42,12 @@ newtype TInstruction = } or TAliasedSsaUnreachedInstruction(IRFunctionBase irFunc) { AliasedSsa::Ssa::hasUnreachedInstruction(irFunc) + } or + TAliasedSsaUninitializedGroupInstruction(AliasedSsa::Ssa::VariableGroup vg) or + TAliasedSsaChiAfterUninitializedGroupInstruction( + TAliasedSsaUninitializedGroupInstruction initGroup + ) { + AliasedSsa::Ssa::hasChiNodeAfterUninitializedGroup(initGroup) } /** @@ -62,7 +69,11 @@ module UnaliasedSsaInstructions { class TChiInstruction = TUnaliasedSsaChiInstruction; - TChiInstruction chiInstruction(TRawInstruction primaryInstruction) { + class TUninitializedGroupInstruction = TUnaliasedSsaUninitializedGroupInstruction; + + class TRawOrUninitializedGroupInstruction = TRawInstruction or TUninitializedGroupInstruction; + + TChiInstruction chiInstruction(TRawOrUninitializedGroupInstruction primaryInstruction) { result = TUnaliasedSsaChiInstruction(primaryInstruction) } @@ -71,6 +82,12 @@ module UnaliasedSsaInstructions { TUnreachedInstruction unreachedInstruction(IRFunctionBase irFunc) { result = TUnaliasedSsaUnreachedInstruction(irFunc) } + + class VariableGroup = UnaliasedSsa::Ssa::VariableGroup; + + // This really should just be `TUnaliasedSsaUninitializedGroupInstruction`, but that makes the + // compiler realize that certain expressions in `SSAConstruction` are unsatisfiable. + TRawOrUninitializedGroupInstruction uninitializedGroup(VariableGroup vg) { none() } } /** @@ -92,10 +109,16 @@ module AliasedSsaInstructions { result = TUnaliasedSsaPhiInstruction(blockStartInstr, _) } - class TChiInstruction = TAliasedSsaChiInstruction; + class TChiInstruction = + TAliasedSsaChiInstruction or TAliasedSsaChiAfterUninitializedGroupInstruction; - TChiInstruction chiInstruction(TRawInstruction primaryInstruction) { + class TRawOrInitialzieGroupInstruction = + TRawInstruction or TAliasedSsaUninitializedGroupInstruction; + + TChiInstruction chiInstruction(TRawOrInitialzieGroupInstruction primaryInstruction) { result = TAliasedSsaChiInstruction(primaryInstruction) + or + result = TAliasedSsaChiAfterUninitializedGroupInstruction(primaryInstruction) } class TUnreachedInstruction = TAliasedSsaUnreachedInstruction; @@ -103,4 +126,12 @@ module AliasedSsaInstructions { TUnreachedInstruction unreachedInstruction(IRFunctionBase irFunc) { result = TAliasedSsaUnreachedInstruction(irFunc) } + + class VariableGroup = AliasedSsa::Ssa::VariableGroup; + + class TUninitializedGroupInstruction = TAliasedSsaUninitializedGroupInstruction; + + TUninitializedGroupInstruction uninitializedGroup(VariableGroup vg) { + result = TAliasedSsaUninitializedGroupInstruction(vg) + } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll index 048beec54245..6989cfde765f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TOperand.qll @@ -12,6 +12,9 @@ private import semmle.code.cpp.ir.internal.Overlap * Provides the newtype used to represent operands across all phases of the IR. */ private module Internal { + private class TAliasedChiInstruction = + TAliasedSsaChiInstruction or TAliasedSsaChiAfterUninitializedGroupInstruction; + /** * An IR operand. `TOperand` is shared across all phases of the IR. There are branches of this * type for operands created directly from the AST (`TRegisterOperand` and `TNonSSAMemoryOperand`), @@ -52,7 +55,7 @@ private module Internal { ) { exists(AliasedConstruction::getPhiOperandDefinition(useInstr, predecessorBlock, overlap)) } or - TAliasedChiOperand(TAliasedSsaChiInstruction useInstr, ChiOperandTag tag) { any() } + TAliasedChiOperand(TAliasedChiInstruction useInstr, ChiOperandTag tag) { any() } } /** @@ -198,10 +201,13 @@ module AliasedSsaOperands { ) } + private class TChiInstruction = + TAliasedSsaChiInstruction or TAliasedSsaChiAfterUninitializedGroupInstruction; + /** * Returns the Chi operand with the specified parameters. */ - TChiOperand chiOperand(TAliasedSsaChiInstruction useInstr, ChiOperandTag tag) { + TChiOperand chiOperand(TChiInstruction useInstr, ChiOperandTag tag) { result = Internal::TAliasedChiOperand(useInstr, tag) } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll index c7e40da1e17c..af5dd4199858 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll @@ -2142,6 +2142,47 @@ class ChiInstruction extends Instruction { final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) } } +/** + * An instruction that initializes a set of allocations that are each assigned + * the same "virtual variable". + * + * As an example, consider the following snippet: + * ``` + * int a; + * int b; + * int* p; + * if(b) { + * p = &a; + * } else { + * p = &b; + * } + * *p = 5; + * int x = a; + * ``` + * + * Since both the address of `a` and `b` reach `p` at `*p = 5` the IR alias + * analysis will create a region that contains both `a` and `b`. The region + * containing both `a` and `b` are initialized by an `UninitializedGroup` + * instruction in the entry block of the enclosing function. + */ +class UninitializedGroupInstruction extends Instruction { + UninitializedGroupInstruction() { this.getOpcode() instanceof Opcode::UninitializedGroup } + + /** + * Gets an `IRVariable` whose memory is initialized by this instruction, if any. + * Note: Allocations that are not represented as `IRVariable`s (such as + * dynamic allocations) are not returned by this predicate even if this + * instruction initializes such memory. + */ + final IRVariable getAnIRVariable() { + result = Construction::getAnUninitializedGroupVariable(this) + } + + final override string getImmediateString() { + result = strictconcat(this.getAnIRVariable().toString(), ",") + } +} + /** * An instruction representing unreachable code. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll index 7bea8178d141..29cdcfedda0f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll @@ -407,6 +407,8 @@ predicate hasUnreachedInstruction(IRFunction func) { ) } +IRVariable getAnUninitializedGroupVariable(UninitializedGroupInstruction instr) { none() } + import CachedForDebugging cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll index c7e40da1e17c..af5dd4199858 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll @@ -2142,6 +2142,47 @@ class ChiInstruction extends Instruction { final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) } } +/** + * An instruction that initializes a set of allocations that are each assigned + * the same "virtual variable". + * + * As an example, consider the following snippet: + * ``` + * int a; + * int b; + * int* p; + * if(b) { + * p = &a; + * } else { + * p = &b; + * } + * *p = 5; + * int x = a; + * ``` + * + * Since both the address of `a` and `b` reach `p` at `*p = 5` the IR alias + * analysis will create a region that contains both `a` and `b`. The region + * containing both `a` and `b` are initialized by an `UninitializedGroup` + * instruction in the entry block of the enclosing function. + */ +class UninitializedGroupInstruction extends Instruction { + UninitializedGroupInstruction() { this.getOpcode() instanceof Opcode::UninitializedGroup } + + /** + * Gets an `IRVariable` whose memory is initialized by this instruction, if any. + * Note: Allocations that are not represented as `IRVariable`s (such as + * dynamic allocations) are not returned by this predicate even if this + * instruction initializes such memory. + */ + final IRVariable getAnIRVariable() { + result = Construction::getAnUninitializedGroupVariable(this) + } + + final override string getImmediateString() { + result = strictconcat(this.getAnIRVariable().toString(), ",") + } +} + /** * An instruction representing unreachable code. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll index 23a7c1e77fde..8f3493c1065f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll @@ -106,8 +106,7 @@ private predicate operandEscapesDomain(Operand operand) { not isArgumentForParameter(_, operand, _) and not isOnlyEscapesViaReturnArgument(operand) and not operand.getUse() instanceof ReturnValueInstruction and - not operand.getUse() instanceof ReturnIndirectionInstruction and - not operand instanceof PhiInputOperand + not operand.getUse() instanceof ReturnIndirectionInstruction } /** @@ -191,6 +190,11 @@ private predicate operandIsPropagated(Operand operand, IntValue bitOffset, Instr // A copy propagates the source value. operand = instr.(CopyInstruction).getSourceValueOperand() and bitOffset = 0 ) + or + operand = instr.(PhiInstruction).getAnInputOperand() and + // Using `unknown` ensures termination since we cannot keep incrementing a bit offset + // through the back edge of a loop (or through recursion). + bitOffset = Ints::unknown() } private predicate operandEscapesNonReturn(Operand operand) { @@ -212,9 +216,6 @@ private predicate operandEscapesNonReturn(Operand operand) { or isOnlyEscapesViaReturnArgument(operand) and resultEscapesNonReturn(operand.getUse()) or - operand instanceof PhiInputOperand and - resultEscapesNonReturn(operand.getUse()) - or operandEscapesDomain(operand) } @@ -236,9 +237,6 @@ private predicate operandMayReachReturn(Operand operand) { operand.getUse() instanceof ReturnValueInstruction or isOnlyEscapesViaReturnArgument(operand) and resultMayReachReturn(operand.getUse()) - or - operand instanceof PhiInputOperand and - resultMayReachReturn(operand.getUse()) } private predicate operandReturned(Operand operand, IntValue bitOffset) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll index d2e68c733041..819f3906b825 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll @@ -15,6 +15,51 @@ private class OldInstruction = Reachability::ReachableInstruction; import Cached +/** + * Holds if `instruction` is the first instruction that may be followed by + * an `UninitializedGroup` instruction, and the enclosing function of + * `instruction` is `func`. + */ +private predicate isFirstInstructionBeforeUninitializedGroup( + Instruction instruction, IRFunction func +) { + instruction = getChi(any(OldIR::InitializeNonLocalInstruction init)) and + func = instruction.getEnclosingIRFunction() +} + +/** Gets the `i`'th `UninitializedGroup` instruction in `func`. */ +private UninitializedGroupInstruction getInitGroupInstruction(int i, IRFunction func) { + exists(Alias::VariableGroup vg | + vg.getIRFunction() = func and + vg.getInitializationOrder() = i and + result = uninitializedGroup(vg) + ) +} + +/** + * Holds if `instruction` is the last instruction in the chain of `UninitializedGroup` + * instructions in `func`. The chain of instructions may be empty in which case + * `instruction` satisfies + * ``` + * isFirstInstructionBeforeUninitializedGroup(instruction, func) + * ``` + */ +predicate isLastInstructionForUninitializedGroups(Instruction instruction, IRFunction func) { + exists(int i | + instruction = getInitGroupInstruction(i, func) and + not exists(getChi(instruction)) and + not exists(getInitGroupInstruction(i + 1, func)) + ) + or + exists(int i | + instruction = getChi(getInitGroupInstruction(i, func)) and + not exists(getInitGroupInstruction(i + 1, func)) + ) + or + isFirstInstructionBeforeUninitializedGroup(instruction, func) and + not exists(getInitGroupInstruction(0, func)) +} + cached private module Cached { cached @@ -32,6 +77,11 @@ private module Cached { hasChiNode(_, primaryInstruction) } + cached + predicate hasChiNodeAfterUninitializedGroup(UninitializedGroupInstruction initGroup) { + hasChiNodeAfterUninitializedGroup(_, initGroup) + } + cached predicate hasUnreachedInstructionCached(IRFunction irFunc) { exists(OldIR::Instruction oldInstruction | @@ -45,7 +95,8 @@ private module Cached { } class TStageInstruction = - TRawInstruction or TPhiInstruction or TChiInstruction or TUnreachedInstruction; + TRawInstruction or TPhiInstruction or TChiInstruction or TUnreachedInstruction or + TUninitializedGroupInstruction; /** * If `oldInstruction` is a `Phi` instruction that has exactly one reachable predecessor block, @@ -78,6 +129,8 @@ private module Cached { or instr instanceof TChiInstruction or + instr instanceof TUninitializedGroupInstruction + or instr instanceof TUnreachedInstruction } @@ -123,7 +176,8 @@ private module Cached { predicate hasModeledMemoryResult(Instruction instruction) { canModelResultForOldInstruction(getOldInstruction(instruction)) or instruction instanceof PhiInstruction or // Phis always have modeled results - instruction instanceof ChiInstruction // Chis always have modeled results + instruction instanceof ChiInstruction or // Chis always have modeled results + instruction instanceof UninitializedGroupInstruction // Group initializers always have modeled results } cached @@ -134,16 +188,23 @@ private module Cached { or // Chi instructions track virtual variables, and therefore a chi instruction is // conflated if it's associated with the aliased virtual variable. - exists(OldInstruction oldInstruction | instruction = getChi(oldInstruction) | - Alias::getResultMemoryLocation(oldInstruction).getVirtualVariable() instanceof + exists(Instruction input | instruction = getChi(input) | + Alias::getResultMemoryLocation(input).getVirtualVariable() instanceof Alias::AliasedVirtualVariable + or + // A chi following an `UninitializedGroupInstruction` only happens when the virtual + // variable of the grouped memory location is `{AllAliasedMemory}`. + exists(Alias::GroupedMemoryLocation gml | + input = uninitializedGroup(gml.getGroup()) and + gml.getVirtualVariable() instanceof Alias::AliasedVirtualVariable + ) ) or // Phi instructions track locations, and therefore a phi instruction is // conflated if it's associated with a conflated location. exists(Alias::MemoryLocation location | instruction = getPhi(_, location) and - not exists(location.getAllocation()) + not exists(location.getAnAllocation()) ) } @@ -205,7 +266,11 @@ private module Cached { hasMemoryOperandDefinition(oldInstruction, oldOperand, overlap, result) ) or - instruction = getChi(getOldInstruction(result)) and + ( + instruction = getChi(getOldInstruction(result)) + or + instruction = getChi(result.(UninitializedGroupInstruction)) + ) and tag instanceof ChiPartialOperandTag and overlap instanceof MustExactlyOverlap or @@ -263,6 +328,14 @@ private module Cached { ) } + cached + IRVariable getAnUninitializedGroupVariable(UninitializedGroupInstruction init) { + exists(Alias::VariableGroup vg | + init = uninitializedGroup(vg) and + result = vg.getAnAllocation().getABaseInstruction().(VariableInstruction).getIRVariable() + ) + } + /** * Holds if `instr` is part of a cycle in the operand graph that doesn't go * through a phi instruction and therefore should be impossible. @@ -316,6 +389,19 @@ private module Cached { result = getNewPhiOperandDefinitionFromOldSsa(instr, newPredecessorBlock, overlap) } + private ChiInstruction getChiAfterUninitializedGroup(int i, IRFunction func) { + result = + rank[i + 1](VariableGroup vg, UninitializedGroupInstruction initGroup, ChiInstruction chi, + int r | + initGroup.getEnclosingIRFunction() = func and + chi = getChi(initGroup) and + initGroup = uninitializedGroup(vg) and + r = vg.getInitializationOrder() + | + chi order by r + ) + } + cached Instruction getChiInstructionTotalOperand(ChiInstruction chiInstr) { exists( @@ -329,6 +415,19 @@ private module Cached { definitionReachesUse(vvar, defBlock, defRank, useBlock, useRank) and result = getDefinitionOrChiInstruction(defBlock, defOffset, vvar, _) ) + or + exists(UninitializedGroupInstruction initGroup, IRFunction func | + chiInstr = getChi(initGroup) and + func = initGroup.getEnclosingIRFunction() + | + chiInstr = getChiAfterUninitializedGroup(0, func) and + isFirstInstructionBeforeUninitializedGroup(result, func) + or + exists(int i | + chiInstr = getChiAfterUninitializedGroup(i + 1, func) and + result = getChiAfterUninitializedGroup(i, func) + ) + ) } cached @@ -344,14 +443,40 @@ private module Cached { ) } - /* - * This adds Chi nodes to the instruction successor relation; if an instruction has a Chi node, - * that node is its successor in the new successor relation, and the Chi node's successors are - * the new instructions generated from the successors of the old instruction - */ + private UninitializedGroupInstruction firstInstructionToUninitializedGroup( + Instruction instruction, EdgeKind kind + ) { + exists(IRFunction func | + isFirstInstructionBeforeUninitializedGroup(instruction, func) and + result = getInitGroupInstruction(0, func) and + kind instanceof GotoEdge + ) + } - cached - Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { + private Instruction getNextUninitializedGroupInstruction(Instruction instruction, EdgeKind kind) { + exists(int i, IRFunction func | + func = instruction.getEnclosingIRFunction() and + instruction = getInitGroupInstruction(i, func) and + kind instanceof GotoEdge + | + if hasChiNodeAfterUninitializedGroup(_, instruction) + then result = getChi(instruction) + else result = getInitGroupInstruction(i + 1, func) + ) + or + exists(int i, IRFunction func, UninitializedGroupInstruction initGroup | + func = instruction.getEnclosingIRFunction() and + instruction = getChi(initGroup) and + initGroup = getInitGroupInstruction(i, func) and + kind instanceof GotoEdge + | + result = getInitGroupInstruction(i + 1, func) + ) + } + + private Instruction getInstructionSuccessorAfterUninitializedGroup0( + Instruction instruction, EdgeKind kind + ) { if hasChiNode(_, getOldInstruction(instruction)) then result = getChi(getOldInstruction(instruction)) and @@ -371,6 +496,107 @@ private module Cached { ) } + private Instruction getInstructionSuccessorAfterUninitializedGroup( + Instruction instruction, EdgeKind kind + ) { + exists(IRFunction func, Instruction firstBeforeUninitializedGroup | + isLastInstructionForUninitializedGroups(instruction, func) and + isFirstInstructionBeforeUninitializedGroup(firstBeforeUninitializedGroup, func) and + result = getInstructionSuccessorAfterUninitializedGroup0(firstBeforeUninitializedGroup, kind) + ) + } + + /** + * This adds Chi nodes to the instruction successor relation; if an instruction has a Chi node, + * that node is its successor in the new successor relation, and the Chi node's successors are + * the new instructions generated from the successors of the old instruction. + * + * Furthermore, the entry block is augmented with `UninitializedGroup` instructions and `Chi` + * instructions. For example, consider this example: + * ```cpp + * int x, y; + * int* p; + * if(b) { + * p = &x; + * escape(&x); + * } else { + * p = &y; + * } + * *p = 42; + * + * int z, w; + * int* q; + * if(b) { + * q = &z; + * } else { + * q = &w; + * } + * *q = 43; + * ``` + * + * the unaliased IR for the entry block of this snippet is: + * ``` + * v1(void) = EnterFunction : + * m1(unknown) = AliasedDefinition : + * m2(unknown) = InitializeNonLocal : + * r1(glval) = VariableAddress[b] : + * m3(bool) = InitializeParameter[b] : &:r1 + * r2(glval) = VariableAddress[x] : + * m4(int) = Uninitialized[x] : &:r2 + * r3(glval) = VariableAddress[y] : + * m5(int) = Uninitialized[y] : &:r3 + * r4(glval) = VariableAddress[p] : + * m6(int *) = Uninitialized[p] : &:r4 + * r5(glval) = VariableAddress[b] : + * r6(bool) = Load[b] : &:r5, m3 + * v2(void) = ConditionalBranch : r6 + * ``` + * and we need to transform this to aliased IR by inserting an `UninitializedGroup` + * instruction for every `VariableGroup` memory location in the function. Furthermore, + * if the `VariableGroup` memory location contains an allocation that escapes we need + * to insert a `Chi` that writes the memory produced by `UninitializedGroup` into + * `{AllAliasedMemory}`. For the above snippet we then end up with: + * ``` + * v1(void) = EnterFunction : + * m2(unknown) = AliasedDefinition : + * m3(unknown) = InitializeNonLocal : + * m4(unknown) = Chi : total:m2, partial:m3 + * m5(int) = UninitializedGroup[x,y] : + * m6(unknown) = Chi : total:m4, partial:m5 + * m7(int) = UninitializedGroup[w,z] : + * r1(glval) = VariableAddress[b] : + * m8(bool) = InitializeParameter[b] : &:r1 + * r2(glval) = VariableAddress[x] : + * m10(int) = Uninitialized[x] : &:r2 + * m11(unknown) = Chi : total:m6, partial:m10 + * r3(glval) = VariableAddress[y] : + * m12(int) = Uninitialized[y] : &:r3 + * m13(unknown) = Chi : total:m11, partial:m12 + * r4(glval) = VariableAddress[p] : + * m14(int *) = Uninitialized[p] : &:r4 + * r5(glval) = VariableAddress[b] : + * r6(bool) = Load[b] : &:r5, m8 + * v2(void) = ConditionalBranch : r6 + * ``` + * + * Here, the group `{x, y}` contains an allocation that escapes (`x`), so there + * is a `Chi` after the `UninitializedGroup` that initializes the memory for the + * `VariableGroup` containing `x`. None of the allocations in `{w, z}` escape so + * there is no `Chi` following that the `UninitializedGroup` that initializes the + * memory of `{w, z}`. + */ + cached + Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { + result = firstInstructionToUninitializedGroup(instruction, kind) + or + result = getNextUninitializedGroupInstruction(instruction, kind) + or + result = getInstructionSuccessorAfterUninitializedGroup(instruction, kind) + or + not isFirstInstructionBeforeUninitializedGroup(instruction, _) and + result = getInstructionSuccessorAfterUninitializedGroup0(instruction, kind) + } + cached Instruction getInstructionBackEdgeSuccessor(Instruction instruction, EdgeKind kind) { exists(OldInstruction oldInstruction | @@ -406,6 +632,16 @@ private module Cached { exists(IRFunctionBase irFunc | instr = unreachedInstruction(irFunc) and result = irFunc.getFunction() ) + or + exists(Alias::VariableGroup vg | + instr = uninitializedGroup(vg) and + result = vg.getIRFunction().getFunction() + ) + or + exists(UninitializedGroupInstruction initGroup | + instr = chiInstruction(initGroup) and + result = getInstructionAst(initGroup) + ) } cached @@ -418,9 +654,16 @@ private module Cached { ) or exists(Instruction primaryInstr, Alias::VirtualVariable vvar | - instr = chiInstruction(primaryInstr) and - hasChiNode(vvar, primaryInstr) and - result = vvar.getType() + instr = chiInstruction(primaryInstr) and result = vvar.getType() + | + hasChiNode(vvar, primaryInstr) + or + hasChiNodeAfterUninitializedGroup(vvar, primaryInstr) + ) + or + exists(Alias::VariableGroup vg | + instr = uninitializedGroup(vg) and + result = vg.getType() ) or instr = reusedPhiInstruction(_) and @@ -448,6 +691,8 @@ private module Cached { or instr = chiInstruction(_) and opcode instanceof Opcode::Chi or + instr = uninitializedGroup(_) and opcode instanceof Opcode::UninitializedGroup + or instr = unreachedInstruction(_) and opcode instanceof Opcode::Unreached } @@ -460,10 +705,15 @@ private module Cached { result = blockStartInstr.getEnclosingIRFunction() ) or - exists(OldInstruction primaryInstr | + exists(Instruction primaryInstr | instr = chiInstruction(primaryInstr) and result = primaryInstr.getEnclosingIRFunction() ) or + exists(Alias::VariableGroup vg | + instr = uninitializedGroup(vg) and + result = vg.getIRFunction() + ) + or instr = unreachedInstruction(result) } @@ -478,6 +728,8 @@ private module Cached { instruction = getChi(oldInstruction) and result = getNewInstruction(oldInstruction) ) + or + instruction = getChi(result.(UninitializedGroupInstruction)) } } @@ -485,7 +737,7 @@ private Instruction getNewInstruction(OldInstruction instr) { getOldInstruction( private OldInstruction getOldInstruction(Instruction instr) { instr = result } -private ChiInstruction getChi(OldInstruction primaryInstr) { result = chiInstruction(primaryInstr) } +private ChiInstruction getChi(Instruction primaryInstr) { result = chiInstruction(primaryInstr) } private PhiInstruction getPhi(OldBlock defBlock, Alias::MemoryLocation defLocation) { result = phiInstruction(defBlock.getFirstInstruction(), defLocation) @@ -506,6 +758,16 @@ private predicate hasChiNode(Alias::VirtualVariable vvar, OldInstruction def) { ) } +private predicate hasChiNodeAfterUninitializedGroup( + Alias::AliasedVirtualVariable vvar, UninitializedGroupInstruction initGroup +) { + exists(Alias::GroupedMemoryLocation defLocation | + initGroup = uninitializedGroup(defLocation.getGroup()) and + defLocation.getVirtualVariable() = vvar and + Alias::getOverlap(defLocation, vvar) instanceof MayPartiallyOverlap + ) +} + private import PhiInsertion /** @@ -668,19 +930,33 @@ private import DefUse * potentially very sparse. */ module DefUse { + bindingset[index, block] + pragma[inline_late] + private int getNonChiOffset(int index, OldBlock block) { + exists(IRFunction func | func = block.getEnclosingIRFunction() | + if + getNewBlock(block) = func.getEntryBlock() and + not block.getInstruction(index) instanceof InitializeNonLocalInstruction and + not block.getInstruction(index) instanceof AliasedDefinitionInstruction + then result = 2 * (index + count(VariableGroup vg | vg.getIRFunction() = func)) + else result = 2 * index + ) + } + + bindingset[index, block] + pragma[inline_late] + private int getChiOffset(int index, OldBlock block) { result = getNonChiOffset(index, block) + 1 } + /** * Gets the `Instruction` for the definition at offset `defOffset` in block `defBlock`. */ - Instruction getDefinitionOrChiInstruction( + private Instruction getDefinitionOrChiInstruction0( OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, Alias::MemoryLocation actualDefLocation ) { - exists(OldInstruction oldInstr, int oldOffset | - oldInstr = defBlock.getInstruction(oldOffset) and - oldOffset >= 0 - | + exists(OldInstruction oldInstr, int oldOffset | oldInstr = defBlock.getInstruction(oldOffset) | // An odd offset corresponds to the `Chi` instruction. - defOffset = oldOffset * 2 + 1 and + defOffset = getChiOffset(oldOffset, defBlock) and result = getChi(oldInstr) and ( defLocation = Alias::getResultMemoryLocation(oldInstr) or @@ -689,7 +965,7 @@ module DefUse { actualDefLocation = defLocation.getVirtualVariable() or // An even offset corresponds to the original instruction. - defOffset = oldOffset * 2 and + defOffset = getNonChiOffset(oldOffset, defBlock) and result = getNewInstruction(oldInstr) and ( defLocation = Alias::getResultMemoryLocation(oldInstr) or @@ -702,6 +978,54 @@ module DefUse { hasDefinition(_, defLocation, defBlock, defOffset) and result = getPhi(defBlock, defLocation) and actualDefLocation = defLocation + or + exists( + Alias::VariableGroup vg, int index, UninitializedGroupInstruction initGroup, + Alias::GroupedMemoryLocation gml + | + // Add 3 to account for the function prologue: + // v1(void) = EnterFunction + // m1(unknown) = AliasedDefinition + // m2(unknown) = InitializeNonLocal + index = 3 + vg.getInitializationOrder() and + not gml.isMayAccess() and + gml.isSome() and + gml.getGroup() = vg and + vg.getIRFunction().getEntryBlock() = defBlock and + initGroup = uninitializedGroup(vg) and + (defLocation = gml or defLocation = gml.getVirtualVariable()) + | + result = initGroup and + defOffset = 2 * index and + actualDefLocation = defLocation + or + result = getChi(initGroup) and + defOffset = 2 * index + 1 and + actualDefLocation = defLocation.getVirtualVariable() + ) + } + + private ChiInstruction remapGetDefinitionOrChiInstruction(Instruction oldResult) { + exists(IRFunction func | + isFirstInstructionBeforeUninitializedGroup(oldResult, func) and + isLastInstructionForUninitializedGroups(result, func) + ) + } + + Instruction getDefinitionOrChiInstruction( + OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, + Alias::MemoryLocation actualDefLocation + ) { + exists(Instruction oldResult | + oldResult = + getDefinitionOrChiInstruction0(defBlock, defOffset, defLocation, actualDefLocation) and + ( + result = remapGetDefinitionOrChiInstruction(oldResult) + or + not exists(remapGetDefinitionOrChiInstruction(oldResult)) and + result = oldResult + ) + ) } /** @@ -842,8 +1166,20 @@ module DefUse { block.getInstruction(index) = def and overlap = Alias::getOverlap(defLocation, useLocation) and if overlap instanceof MayPartiallyOverlap - then offset = (index * 2) + 1 // The use will be connected to the definition on the `Chi` instruction. - else offset = index * 2 // The use will be connected to the definition on the original instruction. + then offset = getChiOffset(index, block) // The use will be connected to the definition on the `Chi` instruction. + else offset = getNonChiOffset(index, block) // The use will be connected to the definition on the original instruction. + ) + or + exists(UninitializedGroupInstruction initGroup, int index, Overlap overlap, VariableGroup vg | + initGroup.getEnclosingIRFunction().getEntryBlock() = getNewBlock(block) and + vg = defLocation.(Alias::GroupedMemoryLocation).getGroup() and + // EnterFunction + AliasedDefinition + InitializeNonLocal + index + index = 3 + vg.getInitializationOrder() and + initGroup = uninitializedGroup(vg) and + overlap = Alias::getOverlap(defLocation, useLocation) and + if overlap instanceof MayPartiallyOverlap and hasChiNodeAfterUninitializedGroup(initGroup) + then offset = 2 * index + 1 // The use will be connected to the definition on the `Chi` instruction. + else offset = 2 * index // The use will be connected to the definition on the original instruction. ) } @@ -904,10 +1240,11 @@ module DefUse { block.getInstruction(index) = use and ( // A direct use of the location. - useLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and offset = index * 2 + useLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and + offset = getNonChiOffset(index, block) or // A `Chi` instruction will include a use of the virtual variable. - hasChiNode(useLocation, use) and offset = (index * 2) + 1 + hasChiNode(useLocation, use) and offset = getChiOffset(index, block) ) ) } @@ -1057,5 +1394,9 @@ module Ssa { predicate hasChiInstruction = Cached::hasChiInstructionCached/1; + predicate hasChiNodeAfterUninitializedGroup = Cached::hasChiNodeAfterUninitializedGroup/1; + predicate hasUnreachedInstruction = Cached::hasUnreachedInstructionCached/1; + + class VariableGroup = Alias::VariableGroup; } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll index 5c33ecf5f99b..8d11fdeec38e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll @@ -2,6 +2,7 @@ import AliasAnalysis private import SimpleSSAImports import SimpleSSAPublicImports private import AliasConfiguration +private import codeql.util.Unit private predicate isTotalAccess(Allocation var, AddressOperand addrOperand, IRType type) { exists(Instruction constantBase, int bitOffset | @@ -48,7 +49,7 @@ predicate canReuseSsaForVariable(IRAutomaticVariable var) { private newtype TMemoryLocation = MkMemoryLocation(Allocation var) { isVariableModeled(var) } -private MemoryLocation getMemoryLocation(Allocation var) { result.getAllocation() = var } +private MemoryLocation getMemoryLocation(Allocation var) { result.getAnAllocation() = var } class MemoryLocation extends TMemoryLocation { Allocation var; @@ -57,7 +58,7 @@ class MemoryLocation extends TMemoryLocation { final string toString() { result = var.getAllocationString() } - final Allocation getAllocation() { result = var } + final Allocation getAnAllocation() { result = var } final Language::Location getLocation() { result = var.getLocation() } @@ -77,6 +78,40 @@ class MemoryLocation extends TMemoryLocation { predicate canReuseSsaForOldResult(Instruction instr) { none() } +abstract class VariableGroup extends Unit { + abstract Allocation getAnAllocation(); + + string toString() { result = "{" + strictconcat(this.getAnAllocation().toString(), ", ") + "}" } + + abstract Language::Location getLocation(); + + abstract IRFunction getIRFunction(); + + abstract Language::LanguageType getType(); + + abstract int getInitializationOrder(); +} + +class GroupedMemoryLocation extends MemoryLocation { + VariableGroup vg; + + GroupedMemoryLocation() { none() } + + /** Gets an allocation of this memory location. */ + Allocation getAnAllocation() { result = vg.getAnAllocation() } + + /** Gets the set of allocations associated with this memory location. */ + VariableGroup getGroup() { result = vg } + + predicate isMayAccess() { none() } + + /** Holds if this memory location represents all the enclosing allocations. */ + predicate isAll() { none() } + + /** Holds if this memory location represents one or more of the enclosing allocations. */ + predicate isSome() { none() } +} + /** * Represents a set of `MemoryLocation`s that cannot overlap with * `MemoryLocation`s outside of the set. The `VirtualVariable` will be diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/StdString.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/StdString.qll index e22468745790..fd28363297a6 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/StdString.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/StdString.qll @@ -66,7 +66,7 @@ abstract private class StdStringTaintFunction extends TaintFunction { * Gets the index of a parameter to this function that is an iterator. */ final int getAnIteratorParameterIndex() { - this.getParameter(result).getType() instanceof Iterator + this.getParameter(result).getUnspecifiedType() instanceof Iterator } } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index abfce5c170f9..3d35dd6b50ed 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1748,6 +1748,25 @@ case @expr.kind of | 361 = @isvoid | 362 = @isvolatile | 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface ; @var_args_expr = @vastartexpr @@ -1842,6 +1861,25 @@ case @expr.kind of | @isunsigned | @isvoid | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface ; new_allocated_type( diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index d6f973be1f64..fbb177927c72 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 9654 + 9651 @externalDataElement @@ -18,71 +18,71 @@ @location_default - 29787737 + 29785199 @location_stmt - 3820076 + 3820138 - @diagnostic - 5001 + @location_expr + 13188829 - @location_expr - 13188614 + @diagnostic + 4979 @file - 123139 + 123129 @folder - 16325 + 16323 @macro_expansion - 32959239 + 32951596 @other_macro_reference - 858248 + 858174 @function - 4646200 + 4645804 @fun_decl - 5010023 + 5009596 @var_decl - 8423424 + 8422707 @type_decl - 3242218 + 3280187 @namespace_decl - 311523 + 311514 @using - 369419 + 369388 @static_assert - 134652 + 134648 @parameter - 6576325 + 6575765 @membervariable - 1054750 + 1054767 @globalvariable @@ -90,11 +90,11 @@ @localvariable - 576895 + 576915 @enumconstant - 241682 + 241686 @errortype @@ -322,27 +322,27 @@ @pointer - 567656 + 567608 @type_with_specifiers - 1010307 + 1010221 @array - 110079 + 110070 @routineptr - 624503 + 624146 @reference - 1720495 + 1720096 @gnu_vector - 671 + 693 @routinereference @@ -350,7 +350,7 @@ @rvalue_reference - 620537 + 620183 @block @@ -358,43 +358,43 @@ @decltype - 27053 + 27051 @usertype - 5230182 + 5228803 @mangledname - 6448521 + 6447972 @type_mention - 4029338 + 4029404 @routinetype - 538026 + 537719 @ptrtomember - 37781 + 37778 @specifier - 24721 + 24719 @gnuattribute - 685665 + 686073 @stdattribute - 487639 + 476990 @declspec - 243121 + 243125 @msattribute @@ -402,15 +402,15 @@ @alignas - 9795 + 9794 @attribute_arg_token - 39180 + 39177 @attribute_arg_constant_expr - 370352 + 370787 @attribute_arg_empty @@ -430,35 +430,35 @@ @derivation - 390988 + 390765 @frienddecl - 706005 + 705602 @comment - 8682106 + 8267972 @namespace - 12127 + 12126 - @specialnamequalifyingelement - 466 + @namequalifier + 1508764 - @namequalifier - 1515301 + @specialnamequalifyingelement + 466 @value - 10777241 + 10777417 @initialiser - 1710223 + 1710171 @address_of @@ -466,15 +466,15 @@ @indirect - 292660 + 292665 @array_to_pointer - 1430911 + 1430934 @parexpr - 3587661 + 3587718 @arithnegexpr @@ -490,19 +490,19 @@ @notexpr - 276439 + 276443 @postincrexpr - 62048 + 62049 @postdecrexpr - 42037 + 42038 @preincrexpr - 70577 + 70578 @predecrexpr @@ -510,87 +510,87 @@ @conditionalexpr - 657271 + 657281 @addexpr - 398414 + 398421 @subexpr - 340775 + 340781 @mulexpr - 306372 + 306377 @divexpr - 133173 + 133175 @remexpr - 15618 + 15609 @paddexpr - 86666 + 86668 @psubexpr - 49902 + 49903 @pdiffexpr - 35178 + 33697 @lshiftexpr - 566331 + 566340 @rshiftexpr - 140847 + 140849 @andexpr - 489081 + 489088 @orexpr - 145472 + 145475 @xorexpr - 54177 + 54178 @eqexpr - 470674 + 470681 @neexpr - 301682 + 301687 @gtexpr - 104015 + 104007 @ltexpr - 101683 + 101675 @geexpr - 59252 + 59253 @leexpr - 212537 + 212540 @assignexpr - 937004 + 937019 @assignaddexpr @@ -602,7 +602,7 @@ @assignmulexpr - 8210 + 8209 @assigndivexpr @@ -610,7 +610,7 @@ @assignremexpr - 413 + 689 @assignlshiftexpr @@ -626,7 +626,7 @@ @assignorexpr - 23654 + 23626 @assignxorexpr @@ -642,23 +642,23 @@ @andlogicalexpr - 249965 + 249969 @orlogicalexpr - 866154 + 866168 @commaexpr - 122711 + 122868 @subscriptexpr - 364880 + 364458 @callexpr - 316245 + 316218 @vastartexpr @@ -678,27 +678,27 @@ @varaccess - 6029430 + 6029528 @runtime_sizeof - 295851 + 295856 @runtime_alignof - 49186 + 49158 @expr_stmt - 94392 + 94393 @routineexpr - 3150048 + 3176148 @type_operand - 1128813 + 1128831 @offsetofexpr @@ -706,11 +706,11 @@ @typescompexpr - 563806 + 563815 @literal - 4406917 + 4406923 @aggregateliteral @@ -718,27 +718,27 @@ @c_style_cast - 4210103 + 4210086 @temp_init - 795228 + 791807 @errorexpr - 46229 + 46203 @reference_to - 1569867 + 1568970 @ref_indirect - 1906417 + 1905327 @vacuous_destructor_call - 8035 + 8030 @assume @@ -794,35 +794,35 @@ @thisaccess - 1117561 + 1117527 @new_expr - 46995 + 46968 @delete_expr - 11618 + 11611 @throw_expr - 21053 + 21048 @condition_decl - 40753 + 40577 @braced_init_list - 1064 + 1060 @type_id - 35968 + 35947 @sizeof_pack - 5597 + 5596 @hasassignexpr @@ -866,7 +866,7 @@ @isabstractexpr - 19 + 18 @isbaseofexpr @@ -878,7 +878,7 @@ @isconvtoexpr - 206 + 197 @isemptyexpr @@ -886,7 +886,7 @@ @isenumexpr - 517 + 492 @ispodexpr @@ -910,7 +910,7 @@ @uuidof - 20293 + 20292 @delete_array_expr @@ -926,43 +926,43 @@ @ctordirectinit - 111383 + 111319 @ctorvirtualinit - 6320 + 6318 @ctorfieldinit - 198277 + 198163 @ctordelegatinginit - 3304 + 3302 @dtordirectdestruct - 41220 + 41197 @dtorvirtualdestruct - 4069 + 4067 @dtorfielddestruct - 41116 + 41092 @static_cast - 214369 + 214320 @reinterpret_cast - 30729 + 31628 @const_cast - 34971 + 34584 @dynamic_cast @@ -970,11 +970,11 @@ @lambdaexpr - 21456 + 21454 @param_ref - 235847 + 234832 @noopexpr @@ -982,7 +982,7 @@ @istriviallyconstructibleexpr - 1345 + 1280 @isdestructibleexpr @@ -994,7 +994,7 @@ @istriviallydestructibleexpr - 827 + 788 @istriviallyassignableexpr @@ -1002,7 +1002,7 @@ @isnothrowassignableexpr - 4138 + 3941 @istrivialexpr @@ -1038,7 +1038,7 @@ @isnothrowconstructibleexpr - 14278 + 13597 @hasfinalizerexpr @@ -1074,11 +1074,11 @@ @isfinalexpr - 1669 + 1668 @noexceptexpr - 24664 + 24558 @builtinshufflevector @@ -1090,7 +1090,7 @@ @builtinaddressof - 13114 + 13106 @vec_fill @@ -1110,11 +1110,11 @@ @co_await - 6 + 12 @co_yield - 1 + 4 @isassignable @@ -1250,67 +1250,143 @@ @reuseexpr - 333955 + 372471 + + + @istriviallycopyassignable + 2 + + + @isassignablenopreconditioncheck + 3 + + + @referencebindstotemporary + 2 + + + @issameas + 2 + + + @builtinhasattribute + 2 + + + @ispointerinterconvertiblewithclass + 2 + + + @builtinispointerinterconvertiblewithclass + 2 + + + @iscorrespondingmember + 2 + + + @builtiniscorrespondingmember + 2 + + + @isboundedarray + 2 + + + @isunboundedarray + 2 + + + @isreferenceable + 2 + + + @isnothrowconvertible + 2 + + + @referenceconstructsfromtemporary + 2 + + + @referenceconvertsfromtemporary + 2 + + + @isconvertible + 2 + + + @isvalidwinrttype + 1 + + + @iswinclass + 1 + + + @iswininterface + 1 @lambdacapture - 27986 + 27983 @stmt_expr - 1486099 + 1486124 @stmt_if - 725951 + 725963 @stmt_while - 29141 + 29134 @stmt_goto - 110696 + 110698 @stmt_label - 53144 + 53145 @stmt_return - 1285039 + 1284930 @stmt_block - 1424038 + 1423917 @stmt_end_test_while - 148881 + 148884 @stmt_for - 61559 + 61560 @stmt_switch_case - 207702 + 206808 @stmt_switch - 20787 + 20788 @stmt_asm - 109988 + 109990 @stmt_decl - 588988 + 588851 @stmt_empty - 191895 + 192673 @stmt_continue @@ -1318,11 +1394,11 @@ @stmt_break - 103193 + 103190 @stmt_try_block - 45069 + 44876 @stmt_microsoft_try @@ -1346,51 +1422,51 @@ @stmt_handler - 62736 + 62466 @stmt_constexpr_if - 52043 + 53108 @stmt_co_return - 2 + 5 @ppd_if - 666541 + 666484 @ppd_ifdef - 263071 + 263049 @ppd_ifndef - 266336 + 266314 @ppd_elif - 25187 + 25185 @ppd_else - 208964 + 208946 @ppd_endif - 1195950 + 1195848 @ppd_plain_include - 311114 + 311088 @ppd_define - 2407258 + 2292433 @ppd_undef - 258407 + 258385 @ppd_include_next @@ -1398,15 +1474,15 @@ @ppd_line - 27551 + 27519 @ppd_error - 103 + 98 @ppd_pragma - 311642 + 296776 @ppd_objc_import @@ -1418,7 +1494,7 @@ @link_target - 817 + 814 @xmldtd @@ -1436,23 +1512,23 @@ @xmlnamespace 4185 - - @xmlcharacters - 439958 - @xmlcomment 26812 + + @xmlcharacters + 439958 + compilations - 9654 + 9651 id - 9654 + 9651 cwd @@ -1470,7 +1546,7 @@ 1 2 - 9654 + 9651 @@ -1496,7 +1572,7 @@ compilation_args - 652584 + 652594 id @@ -1508,7 +1584,7 @@ arg - 34462 + 34463 @@ -1751,7 +1827,7 @@ 2 1043 - 2063 + 2064 @@ -1910,7 +1986,7 @@ 1 2 - 1757 + 1758 2 @@ -1946,7 +2022,7 @@ 1 2 - 1757 + 1758 2 @@ -2044,7 +2120,7 @@ seconds - 9748 + 9948 @@ -2134,38 +2210,38 @@ 5 - 7 - 119 + 8 + 159 - 8 + 9 10 159 10 11 - 79 + 119 11 - 12 - 159 + 14 + 119 - 12 - 17 + 16 + 18 159 - 18 - 22 + 19 + 27 159 - 25 - 98 - 159 + 38 + 96 + 119 @@ -2181,7 +2257,7 @@ 1 2 - 1757 + 1758 2 @@ -2233,12 +2309,12 @@ 3 4 - 1438 + 1318 4 5 - 319 + 439 5 @@ -2248,27 +2324,27 @@ 6 7 - 479 + 399 7 8 - 119 + 159 8 - 10 - 279 + 9 + 239 - 10 - 26 - 239 + 9 + 23 + 279 - 26 - 84 - 239 + 25 + 92 + 279 @@ -2316,16 +2392,21 @@ 3 4 - 79 + 39 - 137 - 138 + 4 + 5 39 - 142 - 143 + 136 + 137 + 39 + + + 145 + 146 39 @@ -2342,27 +2423,27 @@ 1 2 - 4994 + 4954 2 3 - 2117 + 2796 3 4 - 1278 + 1118 4 - 5 - 958 + 6 + 918 - 5 + 7 47 - 399 + 159 @@ -2378,32 +2459,32 @@ 1 2 - 4554 + 4235 2 3 - 1997 + 2317 3 4 - 1238 + 1358 4 5 - 839 + 1158 5 - 7 - 878 + 12 + 759 - 7 - 74 - 239 + 26 + 75 + 119 @@ -2419,12 +2500,12 @@ 1 2 - 8110 + 8390 2 3 - 1638 + 1558 @@ -2434,23 +2515,23 @@ diagnostic_for - 5457 + 5434 diagnostic - 5001 + 4979 compilation - 817 + 814 file_number - 19 + 18 file_number_diagnostic_number - 399 + 397 @@ -2464,12 +2545,12 @@ 1 2 - 4849 + 4828 2 7 - 152 + 151 @@ -2485,7 +2566,7 @@ 1 2 - 5001 + 4979 @@ -2501,7 +2582,7 @@ 1 2 - 5001 + 4979 @@ -2517,27 +2598,27 @@ 5 6 - 608 + 605 7 8 - 76 + 75 9 12 - 57 + 56 13 16 - 38 + 37 21 22 - 38 + 37 @@ -2553,7 +2634,7 @@ 1 2 - 817 + 814 @@ -2569,27 +2650,27 @@ 5 6 - 608 + 605 7 8 - 76 + 75 9 12 - 57 + 56 13 16 - 38 + 37 21 22 - 38 + 37 @@ -2605,7 +2686,7 @@ 263 264 - 19 + 18 @@ -2621,7 +2702,7 @@ 43 44 - 19 + 18 @@ -2637,7 +2718,7 @@ 21 22 - 19 + 18 @@ -2653,42 +2734,42 @@ 2 3 - 114 + 113 3 4 - 38 + 37 4 5 - 38 + 37 5 6 - 38 + 37 7 8 - 38 + 37 11 12 - 38 + 37 37 38 - 76 + 75 43 44 - 19 + 18 @@ -2704,37 +2785,37 @@ 2 3 - 114 + 113 3 4 - 38 + 37 4 5 - 38 + 37 5 6 - 38 + 37 7 8 - 38 + 37 11 12 - 38 + 37 43 44 - 95 + 94 @@ -2750,7 +2831,7 @@ 1 2 - 399 + 397 @@ -2760,19 +2841,19 @@ compilation_finished - 9654 + 9651 id - 9654 + 9651 cpu_seconds - 7763 + 6990 elapsed_seconds - 145 + 134 @@ -2786,7 +2867,7 @@ 1 2 - 9654 + 9651 @@ -2802,7 +2883,7 @@ 1 2 - 9654 + 9651 @@ -2818,17 +2899,17 @@ 1 2 - 6510 + 5457 2 3 - 872 + 1073 3 - 14 - 380 + 16 + 458 @@ -2844,12 +2925,12 @@ 1 2 - 7461 + 6341 2 3 - 302 + 648 @@ -2865,17 +2946,7 @@ 2 3 - 22 - - - 3 - 4 - 11 - - - 6 - 7 - 11 + 33 7 @@ -2888,38 +2959,38 @@ 11 - 9 - 10 + 10 + 11 11 - 37 - 38 + 11 + 12 11 - 47 - 48 + 54 + 55 11 - 118 - 119 + 156 + 157 11 - 140 - 141 + 173 + 174 11 - 229 - 230 + 177 + 178 11 - 255 - 256 + 261 + 262 11 @@ -2936,17 +3007,7 @@ 2 3 - 22 - - - 3 - 4 - 11 - - - 6 - 7 - 11 + 33 7 @@ -2959,38 +3020,38 @@ 11 - 9 - 10 + 10 + 11 11 - 37 - 38 + 11 + 12 11 - 47 - 48 + 48 + 49 11 - 97 - 98 + 109 + 110 11 - 112 - 113 + 120 + 121 11 - 183 - 184 + 132 + 133 11 - 208 - 209 + 232 + 233 11 @@ -4763,31 +4824,31 @@ locations_default - 29787737 + 29785199 id - 29787737 + 29785199 container - 123139 + 123129 startLine - 2093378 + 2093200 startColumn - 36848 + 36845 endLine - 2097576 + 2097398 endColumn - 48043 + 48039 @@ -4801,7 +4862,7 @@ 1 2 - 29787737 + 29785199 @@ -4817,7 +4878,7 @@ 1 2 - 29787737 + 29785199 @@ -4833,7 +4894,7 @@ 1 2 - 29787737 + 29785199 @@ -4849,7 +4910,7 @@ 1 2 - 29787737 + 29785199 @@ -4865,7 +4926,7 @@ 1 2 - 29787737 + 29785199 @@ -4881,62 +4942,62 @@ 1 11 - 9795 + 9794 11 18 - 10261 + 10260 18 30 - 9328 + 9327 30 42 - 9795 + 9794 43 61 - 9795 + 9794 61 79 - 9328 + 9327 80 106 - 9795 + 9794 109 149 - 9328 + 9327 149 199 - 9328 + 9327 206 292 - 9328 + 9327 305 469 - 9328 + 9327 482 850 - 9328 + 9327 939 @@ -4957,67 +5018,67 @@ 1 8 - 9328 + 9327 8 13 - 9328 + 9327 13 20 - 9795 + 9794 20 32 - 9328 + 9327 32 43 - 9795 + 9794 44 61 - 9328 + 9327 62 72 - 9328 + 9327 73 93 - 9328 + 9327 97 128 - 9328 + 9327 128 180 - 9328 + 9327 180 267 - 9328 + 9327 277 414 - 9328 + 9327 439 1465 - 9328 + 9327 1557 @@ -5038,62 +5099,62 @@ 1 4 - 8862 + 8861 4 5 - 7929 + 7928 5 6 - 7463 + 7462 6 8 - 11194 + 11193 8 10 - 9328 + 9327 10 15 - 10728 + 10727 15 23 - 9795 + 9794 23 28 - 11194 + 11193 28 34 - 9795 + 9794 34 44 - 9328 + 9327 44 55 - 9328 + 9327 55 66 - 9795 + 9794 66 @@ -5114,67 +5175,67 @@ 1 8 - 9328 + 9327 8 13 - 9328 + 9327 13 20 - 9795 + 9794 20 32 - 9328 + 9327 32 43 - 9795 + 9794 43 60 - 9328 + 9327 61 71 - 9328 + 9327 72 93 - 9328 + 9327 94 127 - 9328 + 9327 128 179 - 9328 + 9327 180 268 - 9328 + 9327 278 413 - 9328 + 9327 437 1465 - 9328 + 9327 1554 @@ -5195,67 +5256,67 @@ 1 9 - 9795 + 9794 9 13 - 9328 + 9327 13 18 - 9328 + 9327 18 26 - 10261 + 10260 27 33 - 9328 + 9327 33 39 - 9328 + 9327 39 47 - 10261 + 10260 47 54 - 9328 + 9327 54 60 - 10261 + 10260 60 66 - 9328 + 9327 66 74 - 9795 + 9794 74 78 - 9795 + 9794 78 90 - 6996 + 6995 @@ -5271,52 +5332,52 @@ 1 2 - 581183 + 581133 2 3 - 314846 + 314819 3 4 - 194971 + 194954 4 6 - 162320 + 162306 6 10 - 183310 + 183294 10 16 - 161854 + 161840 16 25 - 168384 + 168370 25 45 - 157189 + 157176 45 160 - 157656 + 157643 160 265 - 11660 + 11659 @@ -5332,42 +5393,42 @@ 1 2 - 870375 + 870301 2 3 - 273333 + 273310 3 5 - 193572 + 193555 5 8 - 173515 + 173500 8 13 - 187974 + 187958 13 20 - 160921 + 160907 20 51 - 159522 + 159508 51 265 - 74163 + 74157 @@ -5383,47 +5444,47 @@ 1 2 - 611501 + 611449 2 3 - 312980 + 312954 3 4 - 198236 + 198219 4 6 - 182844 + 182828 6 9 - 173048 + 173034 9 13 - 163253 + 163239 13 19 - 173981 + 173966 19 29 - 165119 + 165105 29 52 - 112411 + 112402 @@ -5439,22 +5500,22 @@ 1 2 - 1530386 + 1530256 2 3 - 348430 + 348400 3 5 - 161854 + 161840 5 16 - 52707 + 52703 @@ -5470,47 +5531,47 @@ 1 2 - 585847 + 585797 2 3 - 316245 + 316218 3 4 - 197770 + 197753 4 6 - 168384 + 168370 6 10 - 191706 + 191690 10 15 - 165585 + 165571 15 22 - 167918 + 167903 22 34 - 164186 + 164172 34 66 - 135733 + 135722 @@ -5612,7 +5673,7 @@ 23 35 - 3265 + 3264 38 @@ -5632,7 +5693,7 @@ 73 84 - 3265 + 3264 84 @@ -5642,12 +5703,12 @@ 96 101 - 3265 + 3264 101 105 - 3265 + 3264 107 @@ -5850,12 +5911,12 @@ 7 11 - 3265 + 3264 11 16 - 3265 + 3264 16 @@ -5865,7 +5926,7 @@ 22 24 - 3265 + 3264 24 @@ -5875,12 +5936,12 @@ 29 34 - 3265 + 3264 34 41 - 3265 + 3264 41 @@ -5921,52 +5982,52 @@ 1 2 - 591444 + 591394 2 3 - 306916 + 306890 3 4 - 198236 + 198219 4 6 - 159522 + 159508 6 10 - 182844 + 182828 10 16 - 160455 + 160441 16 25 - 170716 + 170702 25 45 - 158122 + 158109 45 160 - 158122 + 158109 160 265 - 11194 + 11193 @@ -5982,47 +6043,47 @@ 1 2 - 885767 + 885692 2 3 - 259806 + 259784 3 4 - 125005 + 124995 4 6 - 140864 + 140852 6 10 - 184709 + 184694 10 15 - 168384 + 168370 15 26 - 163253 + 163239 26 120 - 158122 + 158109 121 265 - 11660 + 11659 @@ -6038,22 +6099,22 @@ 1 2 - 1528054 + 1527924 2 3 - 341433 + 341404 3 5 - 170716 + 170702 5 10 - 57372 + 57367 @@ -6069,47 +6130,47 @@ 1 2 - 622696 + 622643 2 3 - 303185 + 303159 3 4 - 201501 + 201484 4 6 - 183777 + 183761 6 9 - 169783 + 169769 9 13 - 166518 + 166504 13 19 - 174914 + 174899 19 29 - 160921 + 160907 29 52 - 114277 + 114267 @@ -6125,47 +6186,47 @@ 1 2 - 597975 + 597924 2 3 - 306916 + 306890 3 4 - 196370 + 196354 4 6 - 169317 + 169302 6 9 - 154857 + 154844 9 14 - 168384 + 168370 14 21 - 178646 + 178630 21 32 - 163253 + 163239 32 60 - 158122 + 158109 60 @@ -6262,7 +6323,7 @@ 1 2 - 5597 + 5596 2 @@ -6338,7 +6399,7 @@ 1 2 - 5597 + 5596 2 @@ -6449,17 +6510,17 @@ 35 39 - 3265 + 3264 39 42 - 3265 + 3264 42 44 - 3265 + 3264 44 @@ -6490,7 +6551,7 @@ 1 2 - 5597 + 5596 2 @@ -6560,11 +6621,11 @@ locations_stmt - 3820076 + 3820138 id - 3820076 + 3820138 container @@ -6572,7 +6633,7 @@ startLine - 200182 + 200185 startColumn @@ -6580,7 +6641,7 @@ endLine - 194437 + 194441 endColumn @@ -6598,7 +6659,7 @@ 1 2 - 3820076 + 3820138 @@ -6614,7 +6675,7 @@ 1 2 - 3820076 + 3820138 @@ -6630,7 +6691,7 @@ 1 2 - 3820076 + 3820138 @@ -6646,7 +6707,7 @@ 1 2 - 3820076 + 3820138 @@ -6662,7 +6723,7 @@ 1 2 - 3820076 + 3820138 @@ -7063,12 +7124,12 @@ 1 2 - 21576 + 21577 2 3 - 15317 + 15318 3 @@ -7113,7 +7174,7 @@ 37 45 - 15111 + 15112 45 @@ -7154,7 +7215,7 @@ 4 6 - 14411 + 14412 6 @@ -7184,7 +7245,7 @@ 29 36 - 16017 + 16018 36 @@ -7194,7 +7255,7 @@ 44 54 - 15667 + 15668 54 @@ -7220,7 +7281,7 @@ 2 3 - 20876 + 20877 3 @@ -7250,7 +7311,7 @@ 8 9 - 20423 + 20424 9 @@ -7281,17 +7342,17 @@ 1 2 - 34650 + 34651 2 3 - 25838 + 25839 3 4 - 18467 + 18468 4 @@ -7336,7 +7397,7 @@ 12 14 - 15811 + 15812 14 @@ -7357,12 +7418,12 @@ 1 2 - 22173 + 22174 2 3 - 16223 + 16224 3 @@ -7377,17 +7438,17 @@ 6 8 - 14720 + 14721 8 10 - 13217 + 13218 10 14 - 18323 + 18324 14 @@ -7813,7 +7874,7 @@ 3 4 - 11508 + 11509 4 @@ -7823,7 +7884,7 @@ 6 8 - 12517 + 12518 8 @@ -7838,7 +7899,7 @@ 15 21 - 16120 + 16121 21 @@ -7848,12 +7909,12 @@ 27 34 - 14967 + 14968 34 42 - 15770 + 15771 42 @@ -7884,7 +7945,7 @@ 2 3 - 16161 + 16162 3 @@ -7904,7 +7965,7 @@ 8 11 - 15914 + 15915 11 @@ -7914,7 +7975,7 @@ 16 20 - 14617 + 14618 20 @@ -7950,7 +8011,7 @@ 1 2 - 32529 + 32530 2 @@ -8026,12 +8087,12 @@ 2 3 - 20423 + 20424 3 4 - 16861 + 16862 4 @@ -8046,7 +8107,7 @@ 6 7 - 20464 + 20465 7 @@ -8056,7 +8117,7 @@ 8 9 - 18776 + 18777 9 @@ -8097,7 +8158,7 @@ 3 4 - 12558 + 12559 4 @@ -8132,7 +8193,7 @@ 19 22 - 14061 + 14062 22 @@ -8542,11 +8603,11 @@ locations_expr - 13188614 + 13188829 id - 13188614 + 13188829 container @@ -8554,7 +8615,7 @@ startLine - 192235 + 192238 startColumn @@ -8562,7 +8623,7 @@ endLine - 192214 + 192217 endColumn @@ -8580,7 +8641,7 @@ 1 2 - 13188614 + 13188829 @@ -8596,7 +8657,7 @@ 1 2 - 13188614 + 13188829 @@ -8612,7 +8673,7 @@ 1 2 - 13188614 + 13188829 @@ -8628,7 +8689,7 @@ 1 2 - 13188614 + 13188829 @@ -8644,7 +8705,7 @@ 1 2 - 13188614 + 13188829 @@ -9065,7 +9126,7 @@ 5 9 - 16511 + 16512 9 @@ -9146,7 +9207,7 @@ 3 4 - 11364 + 11365 4 @@ -9161,7 +9222,7 @@ 8 11 - 16470 + 16471 11 @@ -9171,7 +9232,7 @@ 16 21 - 16470 + 16471 21 @@ -9186,7 +9247,7 @@ 35 43 - 15873 + 15874 43 @@ -9217,7 +9278,7 @@ 7 11 - 16717 + 16718 11 @@ -9257,7 +9318,7 @@ 44 49 - 16923 + 16924 49 @@ -9278,17 +9339,17 @@ 1 2 - 102119 + 102120 2 3 - 44697 + 44698 3 4 - 27691 + 27692 4 @@ -9334,7 +9395,7 @@ 16 21 - 16470 + 16471 21 @@ -9344,7 +9405,7 @@ 27 33 - 16470 + 16471 33 @@ -9354,12 +9415,12 @@ 38 43 - 15564 + 15565 43 47 - 14720 + 14721 47 @@ -9775,12 +9836,12 @@ 1 5 - 16161 + 16162 5 9 - 16511 + 16512 9 @@ -9790,22 +9851,22 @@ 15 23 - 15111 + 15112 23 32 - 15667 + 15668 32 44 - 14761 + 14762 44 60 - 14514 + 14515 60 @@ -9861,7 +9922,7 @@ 3 4 - 11364 + 11365 4 @@ -9906,7 +9967,7 @@ 40 49 - 14617 + 14618 49 @@ -9927,17 +9988,17 @@ 1 2 - 95633 + 95635 2 3 - 50091 + 50092 3 4 - 29420 + 29421 4 @@ -9973,7 +10034,7 @@ 7 11 - 16511 + 16512 11 @@ -10003,12 +10064,12 @@ 36 40 - 15317 + 15318 40 44 - 16470 + 16471 44 @@ -10039,7 +10100,7 @@ 4 7 - 16820 + 16821 7 @@ -10069,12 +10130,12 @@ 32 38 - 17520 + 17521 38 43 - 16161 + 16162 43 @@ -10474,23 +10535,23 @@ numlines - 1382525 + 1382407 element_id - 1375529 + 1375411 num_lines - 101683 + 101675 num_code - 84891 + 84884 num_comment - 59704 + 59699 @@ -10504,12 +10565,12 @@ 1 2 - 1368532 + 1368415 2 3 - 6996 + 6995 @@ -10525,7 +10586,7 @@ 1 2 - 1369465 + 1369348 2 @@ -10546,7 +10607,7 @@ 1 2 - 1375529 + 1375411 @@ -10562,22 +10623,22 @@ 1 2 - 68100 + 68094 2 3 - 12127 + 12126 3 4 - 7463 + 7462 4 21 - 7929 + 7928 29 @@ -10598,12 +10659,12 @@ 1 2 - 70432 + 70426 2 3 - 12127 + 12126 3 @@ -10613,7 +10674,7 @@ 4 6 - 9328 + 9327 6 @@ -10634,22 +10695,22 @@ 1 2 - 69499 + 69493 2 3 - 14926 + 14924 3 4 - 10728 + 10727 4 7 - 6530 + 6529 @@ -10665,27 +10726,27 @@ 1 2 - 52707 + 52703 2 3 - 14459 + 14458 3 5 - 6530 + 6529 5 42 - 6530 + 6529 44 922 - 4664 + 4663 @@ -10701,12 +10762,12 @@ 1 2 - 52707 + 52703 2 3 - 16791 + 16790 3 @@ -10716,7 +10777,7 @@ 5 8 - 6530 + 6529 8 @@ -10737,17 +10798,17 @@ 1 2 - 53174 + 53169 2 3 - 15858 + 15857 3 5 - 7463 + 7462 5 @@ -10757,7 +10818,7 @@ 7 10 - 3265 + 3264 @@ -10773,12 +10834,12 @@ 1 2 - 34516 + 34513 2 3 - 9328 + 9327 3 @@ -10788,7 +10849,7 @@ 4 6 - 4664 + 4663 6 @@ -10814,12 +10875,12 @@ 1 2 - 34516 + 34513 2 3 - 9328 + 9327 3 @@ -10829,17 +10890,17 @@ 4 6 - 4664 + 4663 6 8 - 4664 + 4663 10 38 - 2332 + 2331 @@ -10855,12 +10916,12 @@ 1 2 - 34516 + 34513 2 3 - 9328 + 9327 3 @@ -10870,17 +10931,17 @@ 4 6 - 4664 + 4663 6 10 - 4664 + 4663 10 37 - 2332 + 2331 @@ -10890,31 +10951,31 @@ diagnostics - 5001 + 4979 id - 5001 + 4979 severity - 19 + 18 error_tag - 38 + 37 error_message - 399 + 397 full_error_message - 4202 + 4184 location - 171 + 170 @@ -10928,7 +10989,7 @@ 1 2 - 5001 + 4979 @@ -10944,7 +11005,7 @@ 1 2 - 5001 + 4979 @@ -10960,7 +11021,7 @@ 1 2 - 5001 + 4979 @@ -10976,7 +11037,7 @@ 1 2 - 5001 + 4979 @@ -10992,7 +11053,7 @@ 1 2 - 5001 + 4979 @@ -11008,7 +11069,7 @@ 263 264 - 19 + 18 @@ -11024,7 +11085,7 @@ 2 3 - 19 + 18 @@ -11040,7 +11101,7 @@ 21 22 - 19 + 18 @@ -11056,7 +11117,7 @@ 221 222 - 19 + 18 @@ -11072,7 +11133,7 @@ 9 10 - 19 + 18 @@ -11088,12 +11149,12 @@ 43 44 - 19 + 18 220 221 - 19 + 18 @@ -11109,7 +11170,7 @@ 1 2 - 38 + 37 @@ -11125,12 +11186,12 @@ 1 2 - 19 + 18 20 21 - 19 + 18 @@ -11146,12 +11207,12 @@ 1 2 - 19 + 18 220 221 - 19 + 18 @@ -11167,12 +11228,12 @@ 1 2 - 19 + 18 8 9 - 19 + 18 @@ -11188,27 +11249,27 @@ 1 2 - 114 + 113 2 3 - 152 + 151 3 4 - 76 + 75 43 44 - 19 + 18 93 94 - 38 + 37 @@ -11224,7 +11285,7 @@ 1 2 - 399 + 397 @@ -11240,7 +11301,7 @@ 1 2 - 399 + 397 @@ -11256,22 +11317,22 @@ 1 2 - 133 + 132 2 3 - 152 + 151 3 4 - 76 + 75 93 94 - 38 + 37 @@ -11287,22 +11348,22 @@ 1 2 - 171 + 170 2 3 - 114 + 113 3 4 - 76 + 75 4 5 - 38 + 37 @@ -11318,12 +11379,12 @@ 1 2 - 4183 + 4165 43 44 - 19 + 18 @@ -11339,7 +11400,7 @@ 1 2 - 4202 + 4184 @@ -11355,7 +11416,7 @@ 1 2 - 4202 + 4184 @@ -11371,7 +11432,7 @@ 1 2 - 4202 + 4184 @@ -11387,7 +11448,7 @@ 1 2 - 4202 + 4184 @@ -11403,22 +11464,22 @@ 6 7 - 38 + 37 22 23 - 38 + 37 41 42 - 76 + 75 43 44 - 19 + 18 @@ -11434,7 +11495,7 @@ 1 2 - 171 + 170 @@ -11450,7 +11511,7 @@ 1 2 - 171 + 170 @@ -11466,22 +11527,22 @@ 1 2 - 19 + 18 3 4 - 38 + 37 5 6 - 38 + 37 6 7 - 76 + 75 @@ -11497,22 +11558,22 @@ 1 2 - 19 + 18 6 7 - 38 + 37 22 23 - 38 + 37 41 42 - 76 + 75 @@ -11522,15 +11583,15 @@ files - 123139 + 123129 id - 123139 + 123129 name - 123139 + 123129 @@ -11544,7 +11605,7 @@ 1 2 - 123139 + 123129 @@ -11560,7 +11621,7 @@ 1 2 - 123139 + 123129 @@ -11570,15 +11631,15 @@ folders - 16325 + 16323 id - 16325 + 16323 name - 16325 + 16323 @@ -11592,7 +11653,7 @@ 1 2 - 16325 + 16323 @@ -11608,7 +11669,7 @@ 1 2 - 16325 + 16323 @@ -11618,15 +11679,15 @@ containerparent - 138532 + 138520 parent - 16325 + 16323 child - 138532 + 138520 @@ -11640,12 +11701,12 @@ 1 2 - 7463 + 7462 2 3 - 3265 + 3264 3 @@ -11681,7 +11742,7 @@ 1 2 - 138532 + 138520 @@ -11691,11 +11752,11 @@ fileannotations - 5083033 + 5081854 id - 4855 + 4853 kind @@ -11703,11 +11764,11 @@ name - 54277 + 54265 value - 45630 + 45619 @@ -11726,7 +11787,7 @@ 2 3 - 4687 + 4686 @@ -11942,62 +12003,62 @@ 1 2 - 8781 + 8779 2 3 - 6163 + 6162 3 5 - 4139 + 4138 5 9 - 4228 + 4227 9 14 - 3948 + 3947 14 18 - 4139 + 4138 18 20 - 4676 + 4674 20 34 - 4183 + 4182 34 128 - 4463 + 4462 128 229 - 4083 + 4082 229 387 - 4206 + 4205 387 434 - 1264 + 1263 @@ -12013,7 +12074,7 @@ 1 2 - 54277 + 54265 @@ -12029,57 +12090,57 @@ 1 2 - 8792 + 8790 2 3 - 7987 + 7985 3 4 - 2539 + 2538 4 6 - 4474 + 4473 6 9 - 4094 + 4093 9 14 - 4172 + 4171 14 17 - 4094 + 4093 17 22 - 4552 + 4551 22 41 - 4172 + 4171 41 82 - 4127 + 4126 82 157 - 4071 + 4070 158 @@ -12100,7 +12161,7 @@ 1 2 - 7092 + 7090 2 @@ -12110,12 +12171,12 @@ 5 8 - 3300 + 3299 8 15 - 3501 + 3500 15 @@ -12125,12 +12186,12 @@ 17 19 - 4105 + 4104 19 34 - 3300 + 3299 34 @@ -12140,12 +12201,12 @@ 189 201 - 3579 + 3578 201 266 - 3523 + 3522 266 @@ -12155,7 +12216,7 @@ 322 399 - 3915 + 3914 399 @@ -12176,7 +12237,7 @@ 1 2 - 45619 + 45608 2 @@ -12197,7 +12258,7 @@ 1 2 - 7114 + 7113 2 @@ -12207,12 +12268,12 @@ 5 8 - 3479 + 3478 8 15 - 3523 + 3522 15 @@ -12222,22 +12283,22 @@ 17 19 - 3557 + 3556 19 29 - 3479 + 3478 29 39 - 3635 + 3634 39 48 - 3579 + 3578 48 @@ -12247,12 +12308,12 @@ 74 102 - 3423 + 3422 102 119 - 3568 + 3567 119 @@ -12267,15 +12328,15 @@ inmacroexpansion - 109784721 + 109786483 id - 18028276 + 18028566 inv - 2700307 + 2700352 @@ -12289,37 +12350,37 @@ 1 3 - 1582036 + 1582063 3 5 - 1077853 + 1077870 5 6 - 1184943 + 1184962 6 7 - 4820169 + 4820246 7 8 - 6386284 + 6386387 8 9 - 2605386 + 2605427 9 21 - 371602 + 371608 @@ -12335,32 +12396,32 @@ 1 2 - 378443 + 378450 2 3 - 544126 + 544144 3 4 - 351533 + 351538 4 7 - 200669 + 200672 7 8 - 207162 + 207166 8 9 - 241901 + 241904 9 @@ -12370,22 +12431,22 @@ 10 11 - 325503 + 325508 11 337 - 224867 + 224861 339 423 - 206363 + 206367 423 7616 - 17525 + 17526 @@ -12395,15 +12456,15 @@ affectedbymacroexpansion - 35690892 + 35691465 id - 5157002 + 5157087 inv - 2784914 + 2784960 @@ -12417,37 +12478,37 @@ 1 2 - 2816076 + 2816122 2 3 - 560157 + 560166 3 4 - 264920 + 264924 4 5 - 565823 + 565832 5 12 - 391923 + 391929 12 50 - 407422 + 407428 50 9900 - 150680 + 150682 @@ -12463,62 +12524,62 @@ 1 4 - 229127 + 229132 4 7 - 231800 + 231804 7 9 - 220489 + 220493 9 12 - 251100 + 251104 12 13 - 333995 + 334000 13 14 - 165596 + 165599 14 15 - 298859 + 298864 15 16 - 121849 + 121851 16 17 - 276622 + 276627 17 18 - 146948 + 146950 18 20 - 252148 + 252152 20 25 - 208989 + 208993 25 @@ -12533,19 +12594,19 @@ macroinvocations - 33190389 + 33182692 id - 33190389 + 33182692 macro_id - 78765 + 78746 location - 753510 + 753335 kind @@ -12563,7 +12624,7 @@ 1 2 - 33190389 + 33182692 @@ -12579,7 +12640,7 @@ 1 2 - 33190389 + 33182692 @@ -12595,7 +12656,7 @@ 1 2 - 33190389 + 33182692 @@ -12611,57 +12672,57 @@ 1 2 - 16108 + 16105 2 3 - 16421 + 16418 3 4 - 3087 + 3086 4 5 - 5224 + 5222 5 8 - 5638 + 5636 8 13 - 6051 + 6050 13 26 - 6119 + 6117 26 61 - 6007 + 6005 61 199 - 5917 + 5916 199 1697 - 5962 + 5961 1716 168807 - 2226 + 2225 @@ -12677,37 +12738,37 @@ 1 2 - 42084 + 42074 2 3 - 10302 + 10300 3 4 - 5112 + 5111 4 6 - 6779 + 6777 6 13 - 6421 + 6419 13 66 - 5951 + 5949 66 3614 - 2114 + 2113 @@ -12723,12 +12784,12 @@ 1 2 - 73082 + 73065 2 3 - 5682 + 5681 @@ -12744,37 +12805,37 @@ 1 2 - 278681 + 278617 2 3 - 168090 + 168051 3 4 - 70117 + 70101 4 5 - 59747 + 59734 5 9 - 69759 + 69743 9 21 - 58573 + 58559 21 244764 - 48538 + 48527 @@ -12790,12 +12851,12 @@ 1 2 - 707756 + 707592 2 350 - 45753 + 45742 @@ -12811,7 +12872,7 @@ 1 2 - 753510 + 753335 @@ -12884,15 +12945,15 @@ macroparent - 29680455 + 29673573 id - 29680455 + 29673573 parent_id - 23077000 + 23071649 @@ -12906,7 +12967,7 @@ 1 2 - 29680455 + 29673573 @@ -12922,17 +12983,17 @@ 1 2 - 17830675 + 17826541 2 3 - 4419217 + 4418192 3 88 - 827107 + 826915 @@ -12942,15 +13003,15 @@ macrolocationbind - 4043998 + 4044068 id - 2831290 + 2831338 location - 2021169 + 2021204 @@ -12964,22 +13025,22 @@ 1 2 - 2230032 + 2230070 2 3 - 341142 + 341148 3 7 - 230537 + 230540 7 57 - 29578 + 29579 @@ -12995,22 +13056,22 @@ 1 2 - 1611104 + 1611131 2 3 - 177691 + 177694 3 8 - 156877 + 156880 8 723 - 75496 + 75498 @@ -13020,11 +13081,11 @@ macro_argument_unexpanded - 83786944 + 83767514 invocation - 25979141 + 25973117 argument_index @@ -13032,7 +13093,7 @@ text - 315429 + 315356 @@ -13046,22 +13107,22 @@ 1 2 - 7366004 + 7364296 2 3 - 10578205 + 10575752 3 4 - 6083801 + 6082391 4 67 - 1951130 + 1950677 @@ -13077,22 +13138,22 @@ 1 2 - 7435529 + 7433804 2 3 - 10723430 + 10720943 3 4 - 5918977 + 5917605 4 67 - 1901204 + 1900763 @@ -13160,57 +13221,57 @@ 1 2 - 34756 + 34748 2 3 - 60709 + 60695 3 4 - 17585 + 17581 4 5 - 44657 + 44646 5 7 - 23704 + 23699 7 12 - 18357 + 18353 12 16 - 21422 + 21417 16 23 - 24756 + 24750 23 42 - 24107 + 24101 42 129 - 23861 + 23855 129 522417 - 21511 + 21506 @@ -13226,17 +13287,17 @@ 1 2 - 228118 + 228065 2 3 - 77120 + 77102 3 9 - 10191 + 10188 @@ -13246,11 +13307,11 @@ macro_argument_expanded - 83786944 + 83767514 invocation - 25979141 + 25973117 argument_index @@ -13258,7 +13319,7 @@ text - 191157 + 191113 @@ -13272,22 +13333,22 @@ 1 2 - 7366004 + 7364296 2 3 - 10578205 + 10575752 3 4 - 6083801 + 6082391 4 67 - 1951130 + 1950677 @@ -13303,22 +13364,22 @@ 1 2 - 10593150 + 10590693 2 3 - 9119085 + 9116971 3 4 - 5161172 + 5159975 4 9 - 1105732 + 1105476 @@ -13386,22 +13447,22 @@ 1 2 - 20605 + 20601 2 3 - 36971 + 36963 3 4 - 8982 + 8980 4 5 - 16231 + 16228 5 @@ -13411,37 +13472,37 @@ 6 7 - 22641 + 22636 7 9 - 14665 + 14662 9 14 - 11936 + 11933 14 19 - 14419 + 14416 19 48 - 14341 + 14337 48 151 - 14352 + 14349 152 1060462 - 13614 + 13610 @@ -13457,17 +13518,17 @@ 1 2 - 96742 + 96719 2 3 - 80141 + 80122 3 66 - 14274 + 14270 @@ -13477,19 +13538,19 @@ functions - 4646200 + 4645804 id - 4646200 + 4645804 name - 1917064 + 1916901 kind - 3265 + 3264 @@ -13503,7 +13564,7 @@ 1 2 - 4646200 + 4645804 @@ -13519,7 +13580,7 @@ 1 2 - 4646200 + 4645804 @@ -13535,22 +13596,22 @@ 1 2 - 1504266 + 1504138 2 3 - 152059 + 152046 3 5 - 150193 + 150180 5 1676 - 110546 + 110536 @@ -13566,7 +13627,7 @@ 1 2 - 1916598 + 1916435 2 @@ -13673,15 +13734,15 @@ function_entry_point - 1156769 + 1156670 id - 1146973 + 1146876 entry_point - 1156769 + 1156670 @@ -13695,12 +13756,12 @@ 1 2 - 1137178 + 1137081 2 3 - 9795 + 9794 @@ -13716,7 +13777,7 @@ 1 2 - 1156769 + 1156670 @@ -13726,15 +13787,15 @@ function_return_type - 4651331 + 4650935 id - 4646200 + 4645804 return_type - 987451 + 987367 @@ -13748,7 +13809,7 @@ 1 2 - 4641069 + 4640674 2 @@ -13769,22 +13830,22 @@ 1 2 - 510284 + 510240 2 3 - 375949 + 375917 3 10 - 75096 + 75090 10 2516 - 26120 + 26118 @@ -13794,23 +13855,23 @@ coroutine - 2 + 6 function - 2 + 6 traits - 1 + 3 handle - 2 + 6 promise - 2 + 6 @@ -13824,7 +13885,7 @@ 1 2 - 2 + 6 @@ -13840,7 +13901,7 @@ 1 2 - 2 + 6 @@ -13856,7 +13917,7 @@ 1 2 - 2 + 6 @@ -13869,11 +13930,21 @@ 12 + + 1 + 2 + 1 + 2 3 1 + + 3 + 4 + 1 + @@ -13885,11 +13956,21 @@ 12 + + 1 + 2 + 1 + 2 3 1 + + 3 + 4 + 1 + @@ -13901,11 +13982,21 @@ 12 + + 1 + 2 + 1 + 2 3 1 + + 3 + 4 + 1 + @@ -13920,7 +14011,7 @@ 1 2 - 2 + 6 @@ -13936,7 +14027,7 @@ 1 2 - 2 + 6 @@ -13952,7 +14043,7 @@ 1 2 - 2 + 6 @@ -13968,7 +14059,7 @@ 1 2 - 2 + 6 @@ -13984,7 +14075,7 @@ 1 2 - 2 + 6 @@ -14000,7 +14091,7 @@ 1 2 - 2 + 6 @@ -14010,11 +14101,11 @@ coroutine_new - 2 + 6 function - 2 + 6 new @@ -14032,7 +14123,7 @@ 1 2 - 2 + 6 @@ -14046,8 +14137,8 @@ 12 - 2 - 3 + 6 + 7 1 @@ -14058,11 +14149,11 @@ coroutine_delete - 2 + 6 function - 2 + 6 delete @@ -14080,7 +14171,7 @@ 1 2 - 2 + 6 @@ -14094,8 +14185,8 @@ 12 - 2 - 3 + 6 + 7 1 @@ -14106,59 +14197,59 @@ purefunctions - 100915 + 100911 id - 100915 + 100911 function_deleted - 137599 + 137587 id - 137599 + 137587 function_defaulted - 73697 + 73691 id - 73697 + 73691 function_prototyped - 4554311 + 4553923 id - 4554311 + 4553923 member_function_this_type - 545957 + 545645 id - 545957 + 545645 this_type - 187389 + 187282 @@ -14172,7 +14263,7 @@ 1 2 - 545957 + 545645 @@ -14188,32 +14279,32 @@ 1 2 - 67657 + 67619 2 3 - 44838 + 44812 3 4 - 30193 + 30176 4 5 - 15340 + 15331 5 7 - 15375 + 15366 7 66 - 13983 + 13975 @@ -14223,27 +14314,27 @@ fun_decls - 5015153 + 5014726 id - 5010023 + 5009596 function - 4502537 + 4502153 type_id - 986052 + 985968 name - 1819579 + 1819424 location - 3418532 + 3418241 @@ -14257,7 +14348,7 @@ 1 2 - 5010023 + 5009596 @@ -14273,7 +14364,7 @@ 1 2 - 5004892 + 5004465 2 @@ -14294,7 +14385,7 @@ 1 2 - 5010023 + 5009596 @@ -14310,7 +14401,7 @@ 1 2 - 5010023 + 5009596 @@ -14326,17 +14417,17 @@ 1 2 - 4073879 + 4073532 2 3 - 355893 + 355862 3 7 - 72764 + 72758 @@ -14352,12 +14443,12 @@ 1 2 - 4462889 + 4462509 2 3 - 39647 + 39643 @@ -14373,7 +14464,7 @@ 1 2 - 4502537 + 4502153 @@ -14389,12 +14480,12 @@ 1 2 - 4130318 + 4129966 2 4 - 371285 + 371253 5 @@ -14415,22 +14506,22 @@ 1 2 - 435654 + 435617 2 3 - 438452 + 438415 3 8 - 75096 + 75090 8 2761 - 36848 + 36845 @@ -14446,22 +14537,22 @@ 1 2 - 519613 + 519568 2 3 - 367554 + 367522 3 11 - 75563 + 75556 11 2477 - 23321 + 23319 @@ -14477,17 +14568,17 @@ 1 2 - 858714 + 858641 2 5 - 89556 + 89548 5 823 - 37781 + 37778 @@ -14503,22 +14594,22 @@ 1 2 - 754698 + 754634 2 3 - 131535 + 131524 3 10 - 74630 + 74623 10 2030 - 25187 + 25185 @@ -14534,27 +14625,27 @@ 1 2 - 1234664 + 1234559 2 3 - 266803 + 266780 3 4 - 80693 + 80687 4 6 - 136666 + 136655 6 1710 - 100750 + 100742 @@ -14570,22 +14661,22 @@ 1 2 - 1413777 + 1413656 2 3 - 151126 + 151113 3 5 - 144129 + 144117 5 1660 - 110546 + 110536 @@ -14601,17 +14692,17 @@ 1 2 - 1601285 + 1601149 2 4 - 134800 + 134789 4 930 - 83492 + 83485 @@ -14627,27 +14718,27 @@ 1 2 - 1255654 + 1255547 2 3 - 293390 + 293365 3 4 - 79761 + 79754 4 8 - 137599 + 137587 8 653 - 53174 + 53169 @@ -14663,17 +14754,17 @@ 1 2 - 2962355 + 2962102 2 4 - 296188 + 296163 4 55 - 159988 + 159975 @@ -14689,17 +14780,17 @@ 1 2 - 3029522 + 3029264 2 6 - 262605 + 262582 6 55 - 126405 + 126394 @@ -14715,12 +14806,12 @@ 1 2 - 3208634 + 3208361 2 25 - 209897 + 209879 @@ -14736,12 +14827,12 @@ 1 2 - 3246416 + 3246139 2 13 - 172116 + 172101 @@ -14751,22 +14842,22 @@ fun_def - 1935256 + 1935091 id - 1935256 + 1935091 fun_specialized - 26120 + 26118 id - 26120 + 26118 @@ -14784,11 +14875,11 @@ fun_decl_specifiers - 2904050 + 2903802 id - 1688043 + 1687899 name @@ -14806,17 +14897,17 @@ 1 2 - 490693 + 490652 2 3 - 1178691 + 1178591 3 4 - 18657 + 18655 @@ -14988,26 +15079,26 @@ fun_decl_empty_throws - 1933856 + 1933692 fun_decl - 1933856 + 1933692 fun_decl_noexcept - 60528 + 61680 fun_decl - 60528 + 61680 constant - 60424 + 61582 @@ -15021,7 +15112,7 @@ 1 2 - 60528 + 61680 @@ -15037,12 +15128,12 @@ 1 2 - 60321 + 61483 2 3 - 103 + 98 @@ -15052,22 +15143,22 @@ fun_decl_empty_noexcept - 869909 + 869834 fun_decl - 869909 + 869834 fun_decl_typedef_type - 2867 + 2864 fun_decl - 2867 + 2864 typedeftype_id @@ -15085,7 +15176,7 @@ 1 2 - 2867 + 2864 @@ -15161,19 +15252,19 @@ param_decl_bind - 7380000 + 7379371 id - 7380000 + 7379371 index - 7929 + 7928 fun_decl - 4223140 + 4222780 @@ -15187,7 +15278,7 @@ 1 2 - 7380000 + 7379371 @@ -15203,7 +15294,7 @@ 1 2 - 7380000 + 7379371 @@ -15381,22 +15472,22 @@ 1 2 - 2363447 + 2363245 2 3 - 1060682 + 1060592 3 4 - 502354 + 502312 4 18 - 296655 + 296630 @@ -15412,22 +15503,22 @@ 1 2 - 2363447 + 2363245 2 3 - 1060682 + 1060592 3 4 - 502354 + 502312 4 18 - 296655 + 296630 @@ -15437,27 +15528,27 @@ var_decls - 8494323 + 8493599 id - 8423424 + 8422707 variable - 7412184 + 7411553 type_id - 2384436 + 2384233 name - 667007 + 666951 location - 5307144 + 5306692 @@ -15471,7 +15562,7 @@ 1 2 - 8423424 + 8422707 @@ -15487,12 +15578,12 @@ 1 2 - 8355324 + 8354612 2 3 - 68100 + 68094 @@ -15508,7 +15599,7 @@ 1 2 - 8423424 + 8422707 @@ -15524,7 +15615,7 @@ 1 2 - 8420626 + 8419908 2 @@ -15545,17 +15636,17 @@ 1 2 - 6560933 + 6560374 2 3 - 697792 + 697733 3 7 - 153458 + 153445 @@ -15571,12 +15662,12 @@ 1 2 - 7241001 + 7240384 2 4 - 171183 + 171168 @@ -15592,12 +15683,12 @@ 1 2 - 7296974 + 7296352 2 3 - 115210 + 115200 @@ -15613,12 +15704,12 @@ 1 2 - 6867383 + 6866798 2 4 - 544800 + 544754 @@ -15634,27 +15725,27 @@ 1 2 - 1469283 + 1469158 2 3 - 509351 + 509308 3 4 - 97952 + 97943 4 7 - 187042 + 187026 7 762 - 120807 + 120797 @@ -15670,22 +15761,22 @@ 1 2 - 1602684 + 1602548 2 3 - 484630 + 484588 3 7 - 186575 + 186559 7 724 - 110546 + 110536 @@ -15701,17 +15792,17 @@ 1 2 - 1877417 + 1877257 2 3 - 384812 + 384779 3 128 - 122207 + 122196 @@ -15727,22 +15818,22 @@ 1 2 - 1705301 + 1705156 2 3 - 401604 + 401569 3 8 - 188441 + 188425 8 592 - 89089 + 89082 @@ -15758,37 +15849,37 @@ 1 2 - 340967 + 340937 2 3 - 86757 + 86750 3 4 - 48509 + 48505 4 6 - 51774 + 51770 6 12 - 52241 + 52236 12 33 - 50375 + 50371 34 3223 - 36382 + 36379 @@ -15804,37 +15895,37 @@ 1 2 - 368486 + 368455 2 3 - 77895 + 77888 3 4 - 45244 + 45240 4 6 - 49442 + 49438 6 14 - 53174 + 53169 14 56 - 50841 + 50837 56 3140 - 21922 + 21920 @@ -15850,27 +15941,27 @@ 1 2 - 456643 + 456605 2 3 - 93754 + 93746 3 5 - 46643 + 46639 5 19 - 50841 + 50837 19 1927 - 19124 + 19122 @@ -15886,32 +15977,32 @@ 1 2 - 378748 + 378716 2 3 - 90489 + 90481 3 5 - 59704 + 59699 5 9 - 51308 + 51303 9 21 - 50375 + 50371 21 1010 - 36382 + 36379 @@ -15927,17 +16018,17 @@ 1 2 - 4492275 + 4491892 2 3 - 531274 + 531228 3 1735 - 283595 + 283570 @@ -15953,17 +16044,17 @@ 1 2 - 4881285 + 4880869 2 17 - 415130 + 415095 17 1731 - 10728 + 10727 @@ -15979,12 +16070,12 @@ 1 2 - 4957315 + 4956893 2 1513 - 349829 + 349799 @@ -16000,12 +16091,12 @@ 1 2 - 5297815 + 5297364 2 6 - 9328 + 9327 @@ -16015,26 +16106,26 @@ var_def - 4024903 + 4024560 id - 4024903 + 4024560 var_decl_specifiers - 310648 + 378249 id - 310648 + 378249 name - 1399 + 1865 @@ -16048,7 +16139,7 @@ 1 2 - 310648 + 378249 @@ -16071,6 +16162,11 @@ 67 466 + + 145 + 146 + 466 + 585 586 @@ -16095,19 +16191,19 @@ type_decls - 3242218 + 3280187 id - 3242218 + 3280187 type_id - 3191843 + 3229815 location - 3163390 + 3163120 @@ -16121,7 +16217,7 @@ 1 2 - 3242218 + 3280187 @@ -16137,7 +16233,7 @@ 1 2 - 3242218 + 3280187 @@ -16153,12 +16249,12 @@ 1 2 - 3150330 + 3188306 2 5 - 41513 + 41509 @@ -16174,12 +16270,12 @@ 1 2 - 3150330 + 3188306 2 5 - 41513 + 41509 @@ -16195,12 +16291,12 @@ 1 2 - 3123276 + 3110884 2 20 - 40113 + 52236 @@ -16216,12 +16312,12 @@ 1 2 - 3123276 + 3110884 2 20 - 40113 + 52236 @@ -16231,33 +16327,33 @@ type_def - 2624653 + 2639354 id - 2624653 + 2639354 type_decl_top - 743037 + 742974 type_decl - 743037 + 742974 namespace_decls - 311523 + 311514 id - 311523 + 311514 namespace_id @@ -16265,11 +16361,11 @@ location - 311523 + 311514 bodylocation - 311523 + 311514 @@ -16283,7 +16379,7 @@ 1 2 - 311523 + 311514 @@ -16299,7 +16395,7 @@ 1 2 - 311523 + 311514 @@ -16315,7 +16411,7 @@ 1 2 - 311523 + 311514 @@ -16529,7 +16625,7 @@ 1 2 - 311523 + 311514 @@ -16545,7 +16641,7 @@ 1 2 - 311523 + 311514 @@ -16561,7 +16657,7 @@ 1 2 - 311523 + 311514 @@ -16577,7 +16673,7 @@ 1 2 - 311523 + 311514 @@ -16593,7 +16689,7 @@ 1 2 - 311523 + 311514 @@ -16609,7 +16705,7 @@ 1 2 - 311523 + 311514 @@ -16619,19 +16715,19 @@ usings - 369419 + 369388 id - 369419 + 369388 element_id - 315312 + 315286 location - 247679 + 247658 @@ -16645,7 +16741,7 @@ 1 2 - 369419 + 369388 @@ -16661,7 +16757,7 @@ 1 2 - 369419 + 369388 @@ -16677,12 +16773,12 @@ 1 2 - 263071 + 263049 2 3 - 50841 + 50837 3 @@ -16703,12 +16799,12 @@ 1 2 - 263071 + 263049 2 3 - 50841 + 50837 3 @@ -16729,22 +16825,22 @@ 1 2 - 202434 + 202417 2 4 - 10728 + 10727 4 5 - 31251 + 31248 5 11 - 3265 + 3264 @@ -16760,22 +16856,22 @@ 1 2 - 202434 + 202417 2 4 - 10728 + 10727 4 5 - 31251 + 31248 5 11 - 3265 + 3264 @@ -16785,15 +16881,15 @@ using_container - 462579 + 462471 parent - 10951 + 10949 child - 293313 + 293245 @@ -16807,7 +16903,7 @@ 1 2 - 3266 + 3265 2 @@ -16822,7 +16918,7 @@ 6 7 - 2472 + 2471 7 @@ -16842,7 +16938,7 @@ 179 183 - 850 + 849 201 @@ -16863,22 +16959,22 @@ 1 2 - 216338 + 216288 2 3 - 51257 + 51245 3 11 - 23603 + 23598 13 41 - 2114 + 2113 @@ -16888,19 +16984,19 @@ static_asserts - 134652 + 134648 id - 134652 + 134648 condition - 134652 + 134648 message - 30221 + 30220 location @@ -16922,7 +17018,7 @@ 1 2 - 134652 + 134648 @@ -16938,7 +17034,7 @@ 1 2 - 134652 + 134648 @@ -16954,7 +17050,7 @@ 1 2 - 134652 + 134648 @@ -16970,7 +17066,7 @@ 1 2 - 134652 + 134648 @@ -16986,7 +17082,7 @@ 1 2 - 134652 + 134648 @@ -17002,7 +17098,7 @@ 1 2 - 134652 + 134648 @@ -17018,7 +17114,7 @@ 1 2 - 134652 + 134648 @@ -17034,7 +17130,7 @@ 1 2 - 134652 + 134648 @@ -17153,7 +17249,7 @@ 1 2 - 23664 + 23663 2 @@ -17189,12 +17285,12 @@ 1 2 - 3288 + 3287 2 3 - 2831 + 2830 3 @@ -17229,7 +17325,7 @@ 17 18 - 3434 + 3433 19 @@ -17250,12 +17346,12 @@ 1 2 - 3288 + 3287 2 3 - 2831 + 2830 3 @@ -17290,7 +17386,7 @@ 17 18 - 3434 + 3433 19 @@ -17321,7 +17417,7 @@ 3 4 - 6081 + 6080 4 @@ -17357,7 +17453,7 @@ 4 5 - 3707 + 3706 5 @@ -17496,23 +17592,23 @@ params - 6740045 + 6739471 id - 6576325 + 6575765 function - 3879840 + 3879510 index - 7929 + 7928 type_id - 2188998 + 2188812 @@ -17526,7 +17622,7 @@ 1 2 - 6576325 + 6575765 @@ -17542,7 +17638,7 @@ 1 2 - 6576325 + 6575765 @@ -17558,12 +17654,12 @@ 1 2 - 6452719 + 6452169 2 4 - 123606 + 123595 @@ -17579,22 +17675,22 @@ 1 2 - 2257099 + 2256906 2 3 - 952002 + 951921 3 4 - 429590 + 429553 4 18 - 241149 + 241128 @@ -17610,22 +17706,22 @@ 1 2 - 2257099 + 2256906 2 3 - 952002 + 951921 3 4 - 429590 + 429553 4 18 - 241149 + 241128 @@ -17641,22 +17737,22 @@ 1 2 - 2555153 + 2554936 2 3 - 826063 + 825993 3 4 - 346097 + 346068 4 12 - 152525 + 152512 @@ -17910,22 +18006,22 @@ 1 2 - 1488407 + 1488280 2 3 - 440318 + 440281 3 8 - 170250 + 170235 8 518 - 90022 + 90015 @@ -17941,22 +18037,22 @@ 1 2 - 1708100 + 1707954 2 3 - 248145 + 248124 3 9 - 168384 + 168370 9 502 - 64368 + 64363 @@ -17972,17 +18068,17 @@ 1 2 - 1761740 + 1761590 2 3 - 348430 + 348400 3 13 - 78828 + 78821 @@ -17992,15 +18088,15 @@ overrides - 125864 + 125718 new - 122888 + 122746 old - 9753 + 9742 @@ -18014,12 +18110,12 @@ 1 2 - 119920 + 119782 2 4 - 2967 + 2964 @@ -18035,32 +18131,32 @@ 1 2 - 4293 + 4288 2 3 - 2100 + 2098 3 4 - 925 + 924 4 5 - 458 + 457 5 7 - 850 + 849 7 23 - 762 + 761 25 @@ -18075,19 +18171,19 @@ membervariables - 1056548 + 1056565 id - 1054750 + 1054767 type_id - 327744 + 327749 name - 451642 + 451649 @@ -18101,7 +18197,7 @@ 1 2 - 1053032 + 1053049 2 @@ -18122,7 +18218,7 @@ 1 2 - 1054750 + 1054767 @@ -18138,17 +18234,17 @@ 1 2 - 243041 + 243045 2 3 - 51900 + 51901 3 10 - 25530 + 25531 10 @@ -18169,17 +18265,17 @@ 1 2 - 255267 + 255271 2 3 - 46466 + 46467 3 40 - 24611 + 24612 41 @@ -18200,17 +18296,17 @@ 1 2 - 295341 + 295346 2 3 - 86540 + 86542 3 5 - 41192 + 41193 5 @@ -18231,12 +18327,12 @@ 1 2 - 367858 + 367864 2 3 - 51740 + 51741 3 @@ -18422,19 +18518,19 @@ localvariables - 576895 + 576915 id - 576895 + 576915 type_id - 37592 + 37715 name - 90648 + 90543 @@ -18448,7 +18544,7 @@ 1 2 - 576895 + 576915 @@ -18464,7 +18560,7 @@ 1 2 - 576895 + 576915 @@ -18480,17 +18576,17 @@ 1 2 - 21032 + 21174 2 3 - 5372 + 5362 3 4 - 2459 + 2456 4 @@ -18500,12 +18596,12 @@ 7 18 - 2855 + 2847 18 - 15849 - 2492 + 15850 + 2493 @@ -18521,27 +18617,27 @@ 1 2 - 26775 + 26907 2 3 - 4568 + 4562 3 5 - 2917 + 2918 5 - 31 - 2821 + 33 + 2835 - 31 + 33 3455 - 508 + 491 @@ -18557,27 +18653,27 @@ 1 2 - 57094 + 57028 2 3 - 14300 + 14284 3 5 - 8319 + 8309 5 15 - 6989 + 6981 15 5178 - 3943 + 3938 @@ -18593,17 +18689,17 @@ 1 2 - 76576 + 76488 2 3 - 7419 + 7410 3 1486 - 6652 + 6644 @@ -18613,15 +18709,15 @@ autoderivation - 147957 + 149570 var - 147957 + 149570 derivation_type - 517 + 492 @@ -18635,7 +18731,7 @@ 1 2 - 147957 + 149570 @@ -18649,29 +18745,29 @@ 12 - 33 - 34 - 103 + 34 + 35 + 98 - 91 - 92 - 103 + 101 + 102 + 98 - 354 - 355 - 103 + 377 + 378 + 98 - 392 - 393 - 103 + 411 + 412 + 98 - 560 - 561 - 103 + 595 + 596 + 98 @@ -18681,15 +18777,15 @@ orphaned_variables - 37359 + 37338 var - 37359 + 37338 function - 32837 + 32818 @@ -18703,7 +18799,7 @@ 1 2 - 37359 + 37338 @@ -18719,12 +18815,12 @@ 1 2 - 30785 + 30767 2 47 - 2052 + 2051 @@ -18734,11 +18830,11 @@ enumconstants - 241682 + 241686 id - 241682 + 241686 parent @@ -18754,11 +18850,11 @@ name - 241403 + 241407 location - 221585 + 221589 @@ -18772,7 +18868,7 @@ 1 2 - 241682 + 241686 @@ -18788,7 +18884,7 @@ 1 2 - 241682 + 241686 @@ -18804,7 +18900,7 @@ 1 2 - 241682 + 241686 @@ -18820,7 +18916,7 @@ 1 2 - 241682 + 241686 @@ -18836,7 +18932,7 @@ 1 2 - 241682 + 241686 @@ -19137,12 +19233,12 @@ 3 4 - 1757 + 1758 4 5 - 878 + 879 5 @@ -19157,7 +19253,7 @@ 12 20 - 878 + 879 20 @@ -19193,12 +19289,12 @@ 3 4 - 1757 + 1758 4 5 - 878 + 879 5 @@ -19213,7 +19309,7 @@ 12 20 - 878 + 879 20 @@ -19265,12 +19361,12 @@ 3 4 - 1757 + 1758 4 5 - 878 + 879 5 @@ -19285,7 +19381,7 @@ 12 20 - 878 + 879 20 @@ -19321,12 +19417,12 @@ 3 4 - 1757 + 1758 4 5 - 878 + 879 5 @@ -19341,7 +19437,7 @@ 12 20 - 878 + 879 20 @@ -19447,7 +19543,7 @@ 1 2 - 241123 + 241127 2 @@ -19468,7 +19564,7 @@ 1 2 - 241123 + 241127 2 @@ -19489,7 +19585,7 @@ 1 2 - 241403 + 241407 @@ -19505,7 +19601,7 @@ 1 2 - 241403 + 241407 @@ -19521,7 +19617,7 @@ 1 2 - 241123 + 241127 2 @@ -19542,7 +19638,7 @@ 1 2 - 220826 + 220830 2 @@ -19563,7 +19659,7 @@ 1 2 - 221585 + 221589 @@ -19579,7 +19675,7 @@ 1 2 - 220826 + 220830 2 @@ -19600,7 +19696,7 @@ 1 2 - 221585 + 221589 @@ -19616,7 +19712,7 @@ 1 2 - 220826 + 220830 2 @@ -19631,23 +19727,23 @@ builtintypes - 26120 + 26118 id - 26120 + 26118 name - 26120 + 26118 kind - 26120 + 26118 size - 3265 + 3264 sign @@ -19655,7 +19751,7 @@ alignment - 2332 + 2331 @@ -19669,7 +19765,7 @@ 1 2 - 26120 + 26118 @@ -19685,7 +19781,7 @@ 1 2 - 26120 + 26118 @@ -19701,7 +19797,7 @@ 1 2 - 26120 + 26118 @@ -19717,7 +19813,7 @@ 1 2 - 26120 + 26118 @@ -19733,7 +19829,7 @@ 1 2 - 26120 + 26118 @@ -19749,7 +19845,7 @@ 1 2 - 26120 + 26118 @@ -19765,7 +19861,7 @@ 1 2 - 26120 + 26118 @@ -19781,7 +19877,7 @@ 1 2 - 26120 + 26118 @@ -19797,7 +19893,7 @@ 1 2 - 26120 + 26118 @@ -19813,7 +19909,7 @@ 1 2 - 26120 + 26118 @@ -19829,7 +19925,7 @@ 1 2 - 26120 + 26118 @@ -19845,7 +19941,7 @@ 1 2 - 26120 + 26118 @@ -19861,7 +19957,7 @@ 1 2 - 26120 + 26118 @@ -19877,7 +19973,7 @@ 1 2 - 26120 + 26118 @@ -19893,7 +19989,7 @@ 1 2 - 26120 + 26118 @@ -20052,7 +20148,7 @@ 3 4 - 2332 + 2331 @@ -20312,7 +20408,7 @@ 2 3 - 2332 + 2331 @@ -20328,7 +20424,7 @@ 3 4 - 2332 + 2331 @@ -20338,15 +20434,15 @@ derivedtypes - 4330887 + 4330518 id - 4330887 + 4330518 name - 2161012 + 2160828 kind @@ -20354,7 +20450,7 @@ type_id - 2670830 + 2670603 @@ -20368,7 +20464,7 @@ 1 2 - 4330887 + 4330518 @@ -20384,7 +20480,7 @@ 1 2 - 4330887 + 4330518 @@ -20400,7 +20496,7 @@ 1 2 - 4330887 + 4330518 @@ -20416,17 +20512,17 @@ 1 2 - 1899340 + 1899178 2 5 - 164653 + 164638 5 1153 - 97019 + 97011 @@ -20442,7 +20538,7 @@ 1 2 - 2160079 + 2159895 2 @@ -20463,17 +20559,17 @@ 1 2 - 1899340 + 1899178 2 5 - 164653 + 164638 5 1135 - 97019 + 97011 @@ -20612,22 +20708,22 @@ 1 2 - 1651194 + 1651053 2 3 - 560193 + 560145 3 4 - 354027 + 353997 4 72 - 105415 + 105406 @@ -20643,22 +20739,22 @@ 1 2 - 1662389 + 1662247 2 3 - 552730 + 552683 3 4 - 351228 + 351198 4 72 - 104482 + 104473 @@ -20674,22 +20770,22 @@ 1 2 - 1655392 + 1655251 2 3 - 563924 + 563876 3 4 - 353094 + 353064 4 6 - 98418 + 98410 @@ -20699,11 +20795,11 @@ pointerishsize - 3210500 + 3210227 id - 3210500 + 3210227 size @@ -20725,7 +20821,7 @@ 1 2 - 3210500 + 3210227 @@ -20741,7 +20837,7 @@ 1 2 - 3210500 + 3210227 @@ -20815,19 +20911,19 @@ arraysizes - 88157 + 88149 id - 88157 + 88149 num_elements - 31717 + 31715 bytesize - 33117 + 33114 alignment @@ -20845,7 +20941,7 @@ 1 2 - 88157 + 88149 @@ -20861,7 +20957,7 @@ 1 2 - 88157 + 88149 @@ -20877,7 +20973,7 @@ 1 2 - 88157 + 88149 @@ -20898,7 +20994,7 @@ 2 3 - 23788 + 23786 3 @@ -20929,12 +21025,12 @@ 1 2 - 26587 + 26584 2 3 - 2332 + 2331 3 @@ -20955,7 +21051,7 @@ 1 2 - 26587 + 26584 2 @@ -20965,7 +21061,7 @@ 3 5 - 2332 + 2331 @@ -20986,17 +21082,17 @@ 2 3 - 23788 + 23786 3 4 - 3265 + 3264 4 6 - 2332 + 2331 7 @@ -21017,7 +21113,7 @@ 1 2 - 27519 + 27517 2 @@ -21043,12 +21139,12 @@ 1 2 - 27519 + 27517 2 3 - 4664 + 4663 4 @@ -21151,15 +21247,15 @@ typedefbase - 1672135 + 1671747 id - 1672135 + 1671747 type_id - 787114 + 786932 @@ -21173,7 +21269,7 @@ 1 2 - 1672135 + 1671747 @@ -21189,22 +21285,22 @@ 1 2 - 612558 + 612416 2 3 - 82557 + 82538 3 6 - 61481 + 61467 6 5437 - 30517 + 30510 @@ -21214,23 +21310,23 @@ decltypes - 165808 + 165094 id - 16658 + 16587 expr - 165808 + 165094 base_type - 9945 + 9903 parentheses_would_change_meaning - 19 + 18 @@ -21244,37 +21340,37 @@ 1 2 - 5077 + 5055 2 3 - 6180 + 6153 3 5 - 1102 + 1098 5 12 - 1293 + 1287 12 18 - 1350 + 1344 18 46 - 1255 + 1249 51 740 - 399 + 397 @@ -21290,7 +21386,7 @@ 1 2 - 16658 + 16587 @@ -21306,7 +21402,7 @@ 1 2 - 16658 + 16587 @@ -21322,7 +21418,7 @@ 1 2 - 165808 + 165094 @@ -21338,7 +21434,7 @@ 1 2 - 165808 + 165094 @@ -21354,7 +21450,7 @@ 1 2 - 165808 + 165094 @@ -21370,17 +21466,17 @@ 1 2 - 7226 + 7195 2 3 - 2263 + 2253 4 149 - 456 + 454 @@ -21396,37 +21492,37 @@ 1 2 - 722 + 719 2 3 - 6123 + 6097 3 4 - 342 + 340 4 5 - 969 + 965 5 7 - 760 + 757 7 32 - 798 + 795 32 3888 - 228 + 227 @@ -21442,7 +21538,7 @@ 1 2 - 9945 + 9903 @@ -21458,7 +21554,7 @@ 876 877 - 19 + 18 @@ -21474,7 +21570,7 @@ 8719 8720 - 19 + 18 @@ -21490,7 +21586,7 @@ 523 524 - 19 + 18 @@ -21500,15 +21596,15 @@ usertypes - 5230182 + 5228803 id - 5230182 + 5228803 name - 1351274 + 1351159 kind @@ -21526,7 +21622,7 @@ 1 2 - 5230182 + 5228803 @@ -21542,7 +21638,7 @@ 1 2 - 5230182 + 5228803 @@ -21558,27 +21654,27 @@ 1 2 - 982787 + 982703 2 3 - 153458 + 153445 3 7 - 104482 + 104473 7 61 - 101683 + 101675 65 874 - 8862 + 8861 @@ -21594,17 +21690,17 @@ 1 2 - 1210876 + 1210772 2 3 - 125005 + 125461 3 7 - 15392 + 14924 @@ -21638,8 +21734,8 @@ 466 - 135 - 136 + 133 + 134 466 @@ -21704,8 +21800,8 @@ 466 - 43 - 44 + 41 + 42 466 @@ -21746,19 +21842,19 @@ usertypesize - 1705768 + 1704689 id - 1705768 + 1704689 size - 13526 + 13525 alignment - 2332 + 2331 @@ -21772,7 +21868,7 @@ 1 2 - 1705768 + 1704689 @@ -21788,7 +21884,7 @@ 1 2 - 1705768 + 1704689 @@ -21804,7 +21900,7 @@ 1 2 - 3265 + 3264 2 @@ -21843,7 +21939,7 @@ 740 - 2472 + 2470 932 @@ -21860,7 +21956,7 @@ 1 2 - 10261 + 10260 2 @@ -21904,8 +22000,8 @@ 466 - 3211 - 3212 + 3209 + 3210 466 @@ -21952,26 +22048,26 @@ usertype_final - 9415 + 8966 id - 9415 + 8966 usertype_uuid - 36638 + 36637 id - 36638 + 36637 uuid - 36264 + 36263 @@ -21985,7 +22081,7 @@ 1 2 - 36638 + 36637 @@ -22001,7 +22097,7 @@ 1 2 - 35889 + 35888 2 @@ -22016,15 +22112,15 @@ mangled_name - 9478043 + 9476303 id - 9478043 + 9476303 mangled_name - 6448521 + 6447972 is_complete @@ -22042,7 +22138,7 @@ 1 2 - 9478043 + 9476303 @@ -22058,7 +22154,7 @@ 1 2 - 9478043 + 9476303 @@ -22074,12 +22170,12 @@ 1 2 - 6167725 + 6167199 2 874 - 280796 + 280772 @@ -22095,7 +22191,7 @@ 1 2 - 6448521 + 6447972 @@ -22109,8 +22205,8 @@ 12 - 20320 - 20321 + 20318 + 20319 466 @@ -22137,59 +22233,59 @@ is_pod_class - 530515 + 530392 id - 530515 + 530392 is_standard_layout_class - 1253788 + 1252748 id - 1253788 + 1252748 is_complete - 1645130 + 1644057 id - 1645130 + 1644057 is_class_template - 397872 + 397838 id - 397872 + 397838 class_instantiation - 1088668 + 1088576 to - 1088668 + 1088576 from - 168384 + 168370 @@ -22203,7 +22299,7 @@ 1 2 - 1088668 + 1088576 @@ -22219,42 +22315,42 @@ 1 2 - 59704 + 59699 2 3 - 29385 + 29383 3 4 - 15858 + 15857 4 5 - 13060 + 13059 5 6 - 9795 + 9794 6 10 - 12593 + 12592 10 16 - 13060 + 13059 16 70 - 13526 + 13525 70 @@ -22269,11 +22365,11 @@ class_template_argument - 2857953 + 2857290 type_id - 1304340 + 1304038 index @@ -22281,7 +22377,7 @@ arg_type - 832912 + 832719 @@ -22295,27 +22391,27 @@ 1 2 - 536388 + 536264 2 3 - 395940 + 395848 3 4 - 229337 + 229284 4 7 - 119283 + 119255 7 113 - 23391 + 23385 @@ -22331,22 +22427,22 @@ 1 2 - 562800 + 562669 2 3 - 407082 + 406987 3 4 - 242660 + 242604 4 113 - 91797 + 91776 @@ -22454,27 +22550,27 @@ 1 2 - 518534 + 518414 2 3 - 172856 + 172815 3 4 - 50865 + 50853 4 10 - 63495 + 63480 10 10265 - 27161 + 27154 @@ -22490,17 +22586,17 @@ 1 2 - 734146 + 733975 2 3 - 80599 + 80581 3 22 - 18167 + 18162 @@ -22510,11 +22606,11 @@ class_template_argument_value - 494891 + 494849 type_id - 304584 + 304558 index @@ -22522,7 +22618,7 @@ arg_value - 494891 + 494849 @@ -22536,12 +22632,12 @@ 1 2 - 249544 + 249523 2 3 - 53174 + 53169 3 @@ -22562,22 +22658,22 @@ 1 2 - 189374 + 189358 2 3 - 81160 + 81153 3 4 - 12127 + 12126 4 9 - 21922 + 21920 @@ -22655,7 +22751,7 @@ 1 2 - 494891 + 494849 @@ -22671,7 +22767,7 @@ 1 2 - 494891 + 494849 @@ -22681,15 +22777,15 @@ is_proxy_class_for - 62969 + 62031 id - 62969 + 62031 templ_param_id - 62969 + 62031 @@ -22703,7 +22799,7 @@ 1 2 - 62969 + 62031 @@ -22719,7 +22815,7 @@ 1 2 - 62969 + 62031 @@ -22729,19 +22825,19 @@ type_mentions - 4029338 + 4029404 id - 4029338 + 4029404 type_id - 198212 + 198215 location - 3995817 + 3995882 kind @@ -22759,7 +22855,7 @@ 1 2 - 4029338 + 4029404 @@ -22775,7 +22871,7 @@ 1 2 - 4029338 + 4029404 @@ -22791,7 +22887,7 @@ 1 2 - 4029338 + 4029404 @@ -22807,7 +22903,7 @@ 1 2 - 97608 + 97609 2 @@ -22832,7 +22928,7 @@ 7 12 - 15861 + 15862 12 @@ -22858,7 +22954,7 @@ 1 2 - 97608 + 97609 2 @@ -22883,7 +22979,7 @@ 7 12 - 15861 + 15862 12 @@ -22909,7 +23005,7 @@ 1 2 - 198212 + 198215 @@ -22925,12 +23021,12 @@ 1 2 - 3962295 + 3962360 2 3 - 33521 + 33522 @@ -22946,12 +23042,12 @@ 1 2 - 3962295 + 3962360 2 3 - 33521 + 33522 @@ -22967,7 +23063,7 @@ 1 2 - 3995817 + 3995882 @@ -23025,26 +23121,26 @@ is_function_template - 1401649 + 1401530 id - 1401649 + 1401530 function_instantiation - 894647 + 894135 to - 894647 + 894135 from - 144220 + 144138 @@ -23058,7 +23154,7 @@ 1 2 - 894647 + 894135 @@ -23074,27 +23170,27 @@ 1 2 - 100008 + 99951 2 3 - 14227 + 14219 3 6 - 11861 + 11855 6 21 - 11896 + 11889 22 870 - 6226 + 6223 @@ -23104,11 +23200,11 @@ function_template_argument - 2310067 + 2308747 function_id - 1319621 + 1318866 index @@ -23116,7 +23212,7 @@ arg_type - 300789 + 300617 @@ -23130,22 +23226,22 @@ 1 2 - 673411 + 673026 2 3 - 389910 + 389687 3 4 - 186519 + 186413 4 15 - 69779 + 69739 @@ -23161,22 +23257,22 @@ 1 2 - 690804 + 690409 2 3 - 399684 + 399456 3 4 - 166622 + 166527 4 9 - 62509 + 62473 @@ -23324,32 +23420,32 @@ 1 2 - 184258 + 184153 2 3 - 44038 + 44013 3 5 - 23167 + 23153 5 16 - 23201 + 23188 16 107 - 22714 + 22701 108 957 - 3408 + 3407 @@ -23365,17 +23461,17 @@ 1 2 - 271048 + 270893 2 4 - 25671 + 25656 4 17 - 4069 + 4067 @@ -23385,11 +23481,11 @@ function_template_argument_value - 358464 + 358259 function_id - 192467 + 192357 index @@ -23397,7 +23493,7 @@ arg_value - 355855 + 355651 @@ -23411,12 +23507,12 @@ 1 2 - 183215 + 183110 2 8 - 9252 + 9247 @@ -23432,17 +23528,17 @@ 1 2 - 175875 + 175774 2 31 - 15096 + 15088 32 97 - 1495 + 1494 @@ -23580,12 +23676,12 @@ 1 2 - 353246 + 353044 2 3 - 2608 + 2607 @@ -23601,7 +23697,7 @@ 1 2 - 355855 + 355651 @@ -23611,26 +23707,26 @@ is_variable_template - 46973 + 40299 id - 46973 + 40299 variable_instantiation - 171237 + 178341 to - 171237 + 178341 from - 25659 + 24829 @@ -23644,7 +23740,7 @@ 1 2 - 171237 + 178341 @@ -23660,42 +23756,42 @@ 1 2 - 13761 + 12217 2 3 - 2586 + 2857 3 4 - 1241 + 1182 4 6 - 1862 + 2167 6 8 - 1345 + 1280 8 - 12 - 2172 + 11 + 2069 - 12 - 38 - 1965 + 11 + 31 + 1872 - 46 - 278 - 724 + 33 + 291 + 1182 @@ -23705,19 +23801,19 @@ variable_template_argument - 308331 + 322099 variable_id - 162132 + 169671 index - 1758 + 1675 arg_type - 169995 + 175287 @@ -23731,22 +23827,22 @@ 1 2 - 82980 + 86017 2 3 - 50491 + 54192 3 4 - 18624 + 19213 4 17 - 10036 + 10247 @@ -23762,22 +23858,22 @@ 1 2 - 87636 + 90353 2 3 - 51733 + 55473 3 4 - 13554 + 14385 4 17 - 9208 + 9459 @@ -23791,49 +23887,54 @@ 12 - 9 - 10 - 103 + 10 + 11 + 98 - 19 - 20 - 620 + 20 + 21 + 591 - 26 - 27 - 413 + 27 + 28 + 295 - 47 - 48 - 103 + 28 + 29 + 98 - 93 - 94 - 103 + 50 + 51 + 98 - 185 - 186 - 103 + 100 + 101 + 98 - 548 - 549 - 103 + 196 + 197 + 98 - 627 - 628 - 103 + 589 + 590 + 98 - 1253 - 1254 - 103 + 697 + 698 + 98 + + + 1392 + 1393 + 98 @@ -23849,52 +23950,57 @@ 1 2 - 103 + 98 10 11 - 413 + 394 11 12 - 206 + 197 12 13 - 413 + 295 - 29 - 30 - 103 + 13 + 14 + 98 - 48 - 49 - 103 + 31 + 32 + 98 - 130 - 131 - 103 + 53 + 54 + 98 - 376 - 377 - 103 + 138 + 139 + 98 - 403 - 404 - 103 + 406 + 407 + 98 - 743 - 744 - 103 + 442 + 443 + 98 + + + 809 + 810 + 98 @@ -23910,22 +24016,22 @@ 1 2 - 136783 + 138338 2 3 - 19348 + 21578 3 - 24 - 12829 + 11 + 13301 - 24 - 110 - 1034 + 11 + 119 + 2069 @@ -23941,16 +24047,16 @@ 1 2 - 153130 + 158241 2 3 - 14795 + 14976 3 - 6 + 7 2069 @@ -23961,19 +24067,19 @@ variable_template_argument_value - 11795 + 11922 variable_id - 7760 + 8079 index - 413 + 394 arg_value - 11795 + 11922 @@ -23987,12 +24093,12 @@ 1 2 - 7346 + 7685 2 3 - 413 + 394 @@ -24008,17 +24114,17 @@ 1 2 - 4345 + 4828 2 3 - 3104 + 2955 4 5 - 310 + 295 @@ -24034,22 +24140,22 @@ 4 5 - 103 + 98 - 19 - 20 - 103 + 23 + 24 + 98 26 27 - 103 + 98 - 30 - 31 - 103 + 33 + 34 + 98 @@ -24065,22 +24171,22 @@ 7 8 - 103 + 98 - 28 - 29 - 103 + 32 + 33 + 98 38 39 - 103 + 98 - 41 - 42 - 103 + 44 + 45 + 98 @@ -24096,7 +24202,7 @@ 1 2 - 11795 + 11922 @@ -24112,7 +24218,7 @@ 1 2 - 11795 + 11922 @@ -24122,15 +24228,15 @@ routinetypes - 538026 + 537719 id - 538026 + 537719 return_type - 280336 + 280175 @@ -24144,7 +24250,7 @@ 1 2 - 538026 + 537719 @@ -24160,17 +24266,17 @@ 1 2 - 244159 + 244019 2 3 - 20940 + 20928 3 3595 - 15236 + 15227 @@ -24180,19 +24286,19 @@ routinetypeargs - 982320 + 982237 routine - 423060 + 423024 index - 7929 + 7928 type_id - 226689 + 226670 @@ -24206,27 +24312,27 @@ 1 2 - 152525 + 152512 2 3 - 133868 + 133856 3 4 - 63435 + 63430 4 5 - 45711 + 45707 5 18 - 27519 + 27517 @@ -24242,27 +24348,27 @@ 1 2 - 182377 + 182362 2 3 - 133401 + 133390 3 4 - 58771 + 58766 4 5 - 33583 + 33580 5 11 - 14926 + 14924 @@ -24420,27 +24526,27 @@ 1 2 - 146461 + 146449 2 3 - 30784 + 30782 3 5 - 16791 + 16790 5 12 - 18191 + 18189 12 110 - 14459 + 14458 @@ -24456,22 +24562,22 @@ 1 2 - 172582 + 172567 2 3 - 30784 + 30782 3 6 - 18657 + 18655 6 14 - 4664 + 4663 @@ -24481,19 +24587,19 @@ ptrtomembers - 37781 + 37778 id - 37781 + 37778 type_id - 37781 + 37778 class_id - 15392 + 15391 @@ -24507,7 +24613,7 @@ 1 2 - 37781 + 37778 @@ -24523,7 +24629,7 @@ 1 2 - 37781 + 37778 @@ -24539,7 +24645,7 @@ 1 2 - 37781 + 37778 @@ -24555,7 +24661,7 @@ 1 2 - 37781 + 37778 @@ -24571,7 +24677,7 @@ 1 2 - 13526 + 13525 8 @@ -24597,7 +24703,7 @@ 1 2 - 13526 + 13525 8 @@ -24617,15 +24723,15 @@ specifiers - 24721 + 24719 id - 24721 + 24719 str - 24721 + 24719 @@ -24639,7 +24745,7 @@ 1 2 - 24721 + 24719 @@ -24655,7 +24761,7 @@ 1 2 - 24721 + 24719 @@ -24665,11 +24771,11 @@ typespecifiers - 1291103 + 1290060 type_id - 1272912 + 1271871 spec_id @@ -24687,12 +24793,12 @@ 1 2 - 1254721 + 1253681 2 3 - 18191 + 18189 @@ -24733,12 +24839,7 @@ 219 220 - 466 - - - 221 - 222 - 466 + 932 2042 @@ -24753,11 +24854,11 @@ funspecifiers - 12603886 + 12596680 func_id - 3853638 + 3851434 spec_id @@ -24775,27 +24876,27 @@ 1 2 - 310668 + 310491 2 3 - 540079 + 539770 3 4 - 1133449 + 1132801 4 5 - 1623611 + 1622683 5 8 - 245828 + 245688 @@ -24911,11 +25012,11 @@ varspecifiers - 2244038 + 2243847 var_id - 1223936 + 1223832 spec_id @@ -24933,22 +25034,22 @@ 1 2 - 729510 + 729448 2 3 - 202434 + 202417 3 4 - 58304 + 58299 4 5 - 233686 + 233666 @@ -25009,27 +25110,27 @@ attributes - 729440 + 707258 id - 729440 + 707258 kind - 310 + 295 name - 1655 + 1576 name_space - 206 + 197 location - 479361 + 456496 @@ -25043,7 +25144,7 @@ 1 2 - 729440 + 707258 @@ -25059,7 +25160,7 @@ 1 2 - 729440 + 707258 @@ -25075,7 +25176,7 @@ 1 2 - 729440 + 707258 @@ -25091,7 +25192,7 @@ 1 2 - 729440 + 707258 @@ -25107,17 +25208,17 @@ 5 6 - 103 + 98 2332 2333 - 103 + 98 - 4713 - 4714 - 103 + 4841 + 4842 + 98 @@ -25133,17 +25234,17 @@ 1 2 - 103 + 98 6 7 - 103 + 98 11 12 - 103 + 98 @@ -25159,12 +25260,12 @@ 1 2 - 206 + 197 2 3 - 103 + 98 @@ -25180,17 +25281,17 @@ 2 3 - 103 + 98 2057 2058 - 103 + 98 2574 2575 - 103 + 98 @@ -25206,72 +25307,67 @@ 1 2 - 310 + 197 2 3 - 103 + 197 4 5 - 103 + 98 5 6 - 103 + 98 11 12 - 103 + 98 14 15 - 103 - - - 16 - 17 - 103 + 197 18 19 - 103 + 98 24 25 - 103 + 98 - 86 - 87 - 103 + 88 + 89 + 98 - 115 - 116 - 103 + 117 + 118 + 98 - 1048 - 1049 - 103 + 1080 + 1081 + 98 1760 1761 - 103 + 98 - 3944 - 3945 - 103 + 4037 + 4038 + 98 @@ -25287,12 +25383,12 @@ 1 2 - 1448 + 1379 2 3 - 206 + 197 @@ -25308,7 +25404,7 @@ 1 2 - 1655 + 1576 @@ -25324,67 +25420,67 @@ 1 2 - 310 + 295 2 3 - 206 + 197 4 5 - 103 + 98 6 7 - 103 + 98 8 9 - 103 + 98 9 10 - 103 + 98 14 15 - 103 + 98 18 19 - 103 + 98 59 60 - 103 + 98 72 73 - 103 + 98 333 334 - 103 + 98 1756 1757 - 103 + 98 2388 2389 - 103 + 98 @@ -25398,14 +25494,14 @@ 12 - 19 - 20 - 103 + 20 + 21 + 98 - 7031 - 7032 - 103 + 7158 + 7159 + 98 @@ -25421,12 +25517,12 @@ 1 2 - 103 + 98 3 4 - 103 + 98 @@ -25442,12 +25538,12 @@ 2 3 - 103 + 98 14 15 - 103 + 98 @@ -25463,12 +25559,12 @@ 9 10 - 103 + 98 4624 4625 - 103 + 98 @@ -25484,17 +25580,17 @@ 1 2 - 422351 + 398559 2 3 - 36316 + 35274 3 - 201 - 20693 + 202 + 22662 @@ -25510,7 +25606,7 @@ 1 2 - 479361 + 456496 @@ -25526,12 +25622,12 @@ 1 2 - 475119 + 452456 2 3 - 4242 + 4039 @@ -25547,7 +25643,7 @@ 1 2 - 479361 + 456496 @@ -25557,11 +25653,11 @@ attribute_args - 410000 + 410431 id - 410000 + 410431 kind @@ -25569,7 +25665,7 @@ attribute - 298054 + 298495 index @@ -25577,7 +25673,7 @@ location - 327440 + 327412 @@ -25591,7 +25687,7 @@ 1 2 - 410000 + 410431 @@ -25607,7 +25703,7 @@ 1 2 - 410000 + 410431 @@ -25623,7 +25719,7 @@ 1 2 - 410000 + 410431 @@ -25639,7 +25735,7 @@ 1 2 - 410000 + 410431 @@ -25663,8 +25759,8 @@ 466 - 794 - 795 + 795 + 796 466 @@ -25689,8 +25785,8 @@ 466 - 606 - 607 + 607 + 608 466 @@ -25754,17 +25850,17 @@ 1 2 - 215961 + 216409 2 3 - 52241 + 52236 3 4 - 29852 + 29849 @@ -25780,12 +25876,12 @@ 1 2 - 273799 + 274242 2 3 - 24254 + 24252 @@ -25801,17 +25897,17 @@ 1 2 - 215961 + 216409 2 3 - 52241 + 52236 3 4 - 29852 + 29849 @@ -25827,17 +25923,17 @@ 1 2 - 215961 + 216409 2 3 - 52241 + 52236 3 4 - 29852 + 29849 @@ -25861,8 +25957,8 @@ 466 - 639 - 640 + 640 + 641 466 @@ -25908,8 +26004,8 @@ 466 - 639 - 640 + 640 + 641 466 @@ -25952,17 +26048,17 @@ 1 2 - 278930 + 278440 2 3 - 23321 + 23786 3 9 - 24721 + 24719 17 @@ -25983,12 +26079,12 @@ 1 2 - 314846 + 314819 2 3 - 12593 + 12592 @@ -26004,17 +26100,17 @@ 1 2 - 278930 + 278440 2 3 - 23321 + 23786 3 9 - 24721 + 24719 17 @@ -26035,7 +26131,7 @@ 1 2 - 327440 + 327412 @@ -26045,15 +26141,15 @@ attribute_arg_value - 39180 + 39177 arg - 39180 + 39177 value - 15858 + 15857 @@ -26067,7 +26163,7 @@ 1 2 - 39180 + 39177 @@ -26083,7 +26179,7 @@ 1 2 - 14459 + 14458 2 @@ -26146,15 +26242,15 @@ attribute_arg_constant - 370352 + 370787 arg - 370352 + 370787 constant - 370352 + 370787 @@ -26168,7 +26264,7 @@ 1 2 - 370352 + 370787 @@ -26184,7 +26280,7 @@ 1 2 - 370352 + 370787 @@ -26295,15 +26391,15 @@ typeattributes - 84325 + 82963 type_id - 61666 + 58330 spec_id - 84325 + 82963 @@ -26317,17 +26413,17 @@ 1 2 - 55768 + 49659 2 - 4 - 4242 + 3 + 6897 - 12 + 3 13 - 1655 + 1773 @@ -26343,7 +26439,7 @@ 1 2 - 84325 + 82963 @@ -26353,15 +26449,15 @@ funcattributes - 651615 + 652026 func_id - 443117 + 443079 spec_id - 651615 + 652026 @@ -26375,17 +26471,17 @@ 1 2 - 334436 + 333941 2 3 - 65301 + 65762 3 6 - 34982 + 34979 6 @@ -26406,7 +26502,7 @@ 1 2 - 651615 + 652026 @@ -26522,15 +26618,15 @@ unspecifiedtype - 10145051 + 10143254 type_id - 10145051 + 10143254 unspecified_type_id - 6817474 + 6815961 @@ -26544,7 +26640,7 @@ 1 2 - 10145051 + 10143254 @@ -26560,17 +26656,17 @@ 1 2 - 4584630 + 4583307 2 3 - 1995426 + 1995256 3 145 - 237417 + 237397 @@ -26580,19 +26676,19 @@ member - 4943849 + 4941022 parent - 639217 + 638852 index - 8696 + 8691 child - 4899184 + 4896383 @@ -26606,42 +26702,42 @@ 1 3 - 19062 + 19051 3 4 - 344410 + 344213 4 5 - 37777 + 37755 5 7 - 52491 + 52461 7 10 - 52178 + 52148 10 15 - 49569 + 49540 15 24 - 48943 + 48915 24 251 - 34785 + 34765 @@ -26657,42 +26753,42 @@ 1 3 - 19062 + 19051 3 4 - 344341 + 344144 4 5 - 37811 + 37790 5 7 - 52595 + 52565 7 10 - 52526 + 52496 10 15 - 49186 + 49158 15 24 - 49012 + 48984 24 255 - 34681 + 34661 @@ -26708,17 +26804,17 @@ 1 2 - 1391 + 1390 2 3 - 800 + 799 3 4 - 939 + 938 5 @@ -26779,7 +26875,7 @@ 1 2 - 800 + 799 2 @@ -26834,7 +26930,7 @@ 2770 18057 - 452 + 451 @@ -26850,7 +26946,7 @@ 1 2 - 4899184 + 4896383 @@ -26866,12 +26962,12 @@ 1 2 - 4855876 + 4853100 2 8 - 43307 + 43283 @@ -26881,15 +26977,15 @@ enclosingfunction - 117840 + 117812 child - 117840 + 117812 parent - 67310 + 67294 @@ -26903,7 +26999,7 @@ 1 2 - 117840 + 117812 @@ -26919,22 +27015,22 @@ 1 2 - 35573 + 35565 2 3 - 20885 + 20880 3 4 - 5906 + 5905 4 45 - 4944 + 4943 @@ -26944,15 +27040,15 @@ derivations - 390988 + 390765 derivation - 390988 + 390765 sub - 370743 + 370531 index @@ -26960,11 +27056,11 @@ super - 202451 + 202335 location - 37672 + 37651 @@ -26978,7 +27074,7 @@ 1 2 - 390988 + 390765 @@ -26994,7 +27090,7 @@ 1 2 - 390988 + 390765 @@ -27010,7 +27106,7 @@ 1 2 - 390988 + 390765 @@ -27026,7 +27122,7 @@ 1 2 - 390988 + 390765 @@ -27042,12 +27138,12 @@ 1 2 - 355785 + 355582 2 7 - 14957 + 14949 @@ -27063,12 +27159,12 @@ 1 2 - 355785 + 355582 2 7 - 14957 + 14949 @@ -27084,12 +27180,12 @@ 1 2 - 355785 + 355582 2 7 - 14957 + 14949 @@ -27105,12 +27201,12 @@ 1 2 - 355785 + 355582 2 7 - 14957 + 14949 @@ -27255,12 +27351,12 @@ 1 2 - 195076 + 194965 2 1519 - 7374 + 7370 @@ -27276,12 +27372,12 @@ 1 2 - 195076 + 194965 2 1519 - 7374 + 7370 @@ -27297,12 +27393,12 @@ 1 2 - 201999 + 201883 2 4 - 452 + 451 @@ -27318,12 +27414,12 @@ 1 2 - 198798 + 198685 2 108 - 3652 + 3650 @@ -27339,22 +27435,22 @@ 1 2 - 28002 + 27986 2 5 - 3200 + 3198 5 15 - 2887 + 2885 15 134 - 2852 + 2850 136 @@ -27375,22 +27471,22 @@ 1 2 - 28002 + 27986 2 5 - 3200 + 3198 5 15 - 2887 + 2885 15 134 - 2852 + 2850 136 @@ -27411,7 +27507,7 @@ 1 2 - 37672 + 37651 @@ -27427,22 +27523,22 @@ 1 2 - 30367 + 30350 2 5 - 3339 + 3337 5 45 - 2852 + 2850 54 415 - 1113 + 1112 @@ -27452,11 +27548,11 @@ derspecifiers - 392867 + 392642 der_id - 390605 + 390382 spec_id @@ -27474,12 +27570,12 @@ 1 2 - 388344 + 388122 2 3 - 2261 + 2259 @@ -27520,11 +27616,11 @@ direct_base_offsets - 362081 + 361874 der_id - 362081 + 361874 offset @@ -27542,7 +27638,7 @@ 1 2 - 362081 + 361874 @@ -27593,11 +27689,11 @@ virtual_base_offsets - 6443 + 6442 sub - 3557 + 3556 super @@ -27650,12 +27746,12 @@ 1 2 - 2998 + 2997 2 4 - 302 + 301 4 @@ -27884,23 +27980,23 @@ frienddecls - 706005 + 705602 id - 706005 + 705602 type_id - 41846 + 41822 decl_id - 69292 + 69253 location - 6261 + 6257 @@ -27914,7 +28010,7 @@ 1 2 - 706005 + 705602 @@ -27930,7 +28026,7 @@ 1 2 - 706005 + 705602 @@ -27946,7 +28042,7 @@ 1 2 - 706005 + 705602 @@ -27962,47 +28058,47 @@ 1 2 - 6122 + 6118 2 3 - 13044 + 13037 3 6 - 2921 + 2920 6 10 - 3165 + 3163 10 17 - 3235 + 3233 17 24 - 3304 + 3302 25 36 - 3269 + 3267 37 55 - 3200 + 3198 55 103 - 3582 + 3580 @@ -28018,47 +28114,47 @@ 1 2 - 6122 + 6118 2 3 - 13044 + 13037 3 6 - 2921 + 2920 6 10 - 3165 + 3163 10 17 - 3235 + 3233 17 24 - 3304 + 3302 25 36 - 3269 + 3267 37 55 - 3200 + 3198 55 103 - 3582 + 3580 @@ -28074,12 +28170,12 @@ 1 2 - 40420 + 40397 2 13 - 1426 + 1425 @@ -28095,37 +28191,37 @@ 1 2 - 39968 + 39945 2 3 - 5809 + 5805 3 8 - 5948 + 5944 8 15 - 5356 + 5353 15 32 - 5217 + 5214 32 71 - 5217 + 5214 72 160 - 1774 + 1773 @@ -28141,37 +28237,37 @@ 1 2 - 39968 + 39945 2 3 - 5809 + 5805 3 8 - 5948 + 5944 8 15 - 5356 + 5353 15 32 - 5217 + 5214 32 71 - 5217 + 5214 72 160 - 1774 + 1773 @@ -28187,7 +28283,7 @@ 1 2 - 68631 + 68592 2 @@ -28208,7 +28304,7 @@ 1 2 - 5878 + 5875 2 @@ -28229,7 +28325,7 @@ 1 2 - 6122 + 6118 2 @@ -28250,7 +28346,7 @@ 1 2 - 5913 + 5910 2 @@ -28265,19 +28361,19 @@ comments - 8682106 + 8267972 id - 8682106 + 8267972 contents - 3305971 + 3148277 location - 8682106 + 8267972 @@ -28291,7 +28387,7 @@ 1 2 - 8682106 + 8267972 @@ -28307,7 +28403,7 @@ 1 2 - 8682106 + 8267972 @@ -28323,17 +28419,17 @@ 1 2 - 3024231 + 2879976 2 7 - 248527 + 236672 7 32784 - 33212 + 31628 @@ -28349,17 +28445,17 @@ 1 2 - 3024231 + 2879976 2 7 - 248527 + 236672 7 32784 - 33212 + 31628 @@ -28375,7 +28471,7 @@ 1 2 - 8682106 + 8267972 @@ -28391,7 +28487,7 @@ 1 2 - 8682106 + 8267972 @@ -28401,15 +28497,15 @@ commentbinding - 3088293 + 3088030 id - 2443208 + 2443000 element - 3011797 + 3011541 @@ -28423,12 +28519,12 @@ 1 2 - 2366245 + 2366044 2 97 - 76962 + 76955 @@ -28444,12 +28540,12 @@ 1 2 - 2935301 + 2935051 2 3 - 76496 + 76489 @@ -28459,15 +28555,15 @@ exprconv - 7033379 + 7033492 converted - 7033379 + 7033492 conversion - 7033379 + 7033492 @@ -28481,7 +28577,7 @@ 1 2 - 7033379 + 7033492 @@ -28497,7 +28593,7 @@ 1 2 - 7033379 + 7033492 @@ -28507,30 +28603,30 @@ compgenerated - 9267960 + 9273474 id - 9267960 + 9273474 synthetic_destructor_call - 473158 + 510792 element - 286203 + 324717 i - 380 + 359 destructor_call - 473158 + 510792 @@ -28544,27 +28640,27 @@ 1 2 - 188057 + 227088 2 3 - 50984 + 50651 3 4 - 21850 + 21775 4 - 6 - 21584 + 8 + 24539 - 6 + 8 20 - 3727 + 662 @@ -28580,27 +28676,27 @@ 1 2 - 188057 + 227088 2 3 - 50984 + 50651 3 4 - 21850 + 21775 4 - 6 - 21584 + 8 + 24539 - 6 + 8 20 - 3727 + 662 @@ -28616,102 +28712,97 @@ 2 3 - 19 + 18 3 4 - 19 + 18 4 5 - 19 + 18 5 6 - 19 + 18 6 7 - 19 + 18 7 8 - 19 + 18 10 11 - 19 + 18 11 12 - 19 + 18 16 17 - 19 + 18 19 20 - 19 + 18 27 28 - 19 + 18 35 36 - 19 - - - 37 - 38 - 19 + 18 83 84 - 19 + 18 196 197 - 19 + 18 435 436 - 19 + 18 1331 1332 - 19 + 18 - 2480 - 2481 - 19 + 2481 + 2482 + 18 5156 5157 - 19 + 18 - 15018 - 15019 - 19 + 17149 + 17150 + 18 @@ -28727,102 +28818,97 @@ 2 3 - 19 + 18 3 4 - 19 + 18 4 5 - 19 + 18 5 6 - 19 + 18 6 7 - 19 + 18 7 8 - 19 + 18 10 11 - 19 + 18 11 12 - 19 + 18 16 17 - 19 + 18 19 20 - 19 + 18 27 28 - 19 + 18 35 36 - 19 - - - 37 - 38 - 19 + 18 83 84 - 19 + 18 196 197 - 19 + 18 435 436 - 19 + 18 1331 1332 - 19 + 18 - 2480 - 2481 - 19 + 2481 + 2482 + 18 5156 5157 - 19 + 18 - 15018 - 15019 - 19 + 17149 + 17150 + 18 @@ -28838,7 +28924,7 @@ 1 2 - 473158 + 510792 @@ -28854,7 +28940,7 @@ 1 2 - 473158 + 510792 @@ -28864,15 +28950,15 @@ namespaces - 12127 + 12126 id - 12127 + 12126 name - 9795 + 9794 @@ -28886,7 +28972,7 @@ 1 2 - 12127 + 12126 @@ -28933,15 +29019,15 @@ namespacembrs - 2385836 + 2385633 parentid - 10261 + 10260 memberid - 2385836 + 2385633 @@ -29016,7 +29102,7 @@ 1 2 - 2385836 + 2385633 @@ -29026,11 +29112,11 @@ exprparents - 14207231 + 14207462 expr_id - 14207231 + 14207462 child_index @@ -29038,7 +29124,7 @@ parent_id - 9454166 + 9454319 @@ -29052,7 +29138,7 @@ 1 2 - 14207231 + 14207462 @@ -29068,7 +29154,7 @@ 1 2 - 14207231 + 14207462 @@ -29186,17 +29272,17 @@ 1 2 - 5409633 + 5409721 2 3 - 3706777 + 3706838 3 712 - 337754 + 337760 @@ -29212,17 +29298,17 @@ 1 2 - 5409633 + 5409721 2 3 - 3706777 + 3706838 3 712 - 337754 + 337760 @@ -29232,22 +29318,22 @@ expr_isload - 5168684 + 5082911 expr_id - 5168684 + 5082911 conversionkinds - 4221331 + 4221314 expr_id - 4221331 + 4221314 kind @@ -29265,7 +29351,7 @@ 1 2 - 4221331 + 4221314 @@ -29304,8 +29390,8 @@ 1 - 4131254 - 4131255 + 4131237 + 4131238 1 @@ -29316,15 +29402,15 @@ iscall - 3182186 + 3208148 caller - 3182186 + 3208148 kind - 57 + 56 @@ -29338,7 +29424,7 @@ 1 2 - 3182186 + 3208148 @@ -29354,17 +29440,17 @@ 1319 1320 - 19 + 18 2473 2474 - 19 + 18 - 163543 - 163544 - 19 + 165637 + 165638 + 18 @@ -29374,15 +29460,15 @@ numtemplatearguments - 393249 + 393024 expr_id - 393249 + 393024 num - 313 + 312 @@ -29396,7 +29482,7 @@ 1 2 - 393249 + 393024 @@ -29500,23 +29586,23 @@ namequalifiers - 1515301 + 1508764 id - 1515301 + 1508764 qualifiableelement - 1515301 + 1508764 qualifyingelement - 97613 + 97193 location - 304593 + 303282 @@ -29530,7 +29616,7 @@ 1 2 - 1515301 + 1508764 @@ -29546,7 +29632,7 @@ 1 2 - 1515301 + 1508764 @@ -29562,7 +29648,7 @@ 1 2 - 1515301 + 1508764 @@ -29578,7 +29664,7 @@ 1 2 - 1515301 + 1508764 @@ -29594,7 +29680,7 @@ 1 2 - 1515301 + 1508764 @@ -29610,7 +29696,7 @@ 1 2 - 1515301 + 1508764 @@ -29626,27 +29712,27 @@ 1 2 - 58457 + 58206 2 3 - 22420 + 22324 3 5 - 8918 + 8880 5 92 - 7378 + 7346 96 21584 - 437 + 435 @@ -29662,27 +29748,27 @@ 1 2 - 58457 + 58206 2 3 - 22420 + 22324 3 5 - 8918 + 8880 5 92 - 7378 + 7346 96 21584 - 437 + 435 @@ -29698,22 +29784,22 @@ 1 2 - 63877 + 63602 2 3 - 20671 + 20582 3 5 - 8386 + 8350 5 7095 - 4678 + 4658 @@ -29729,32 +29815,32 @@ 1 2 - 100656 + 100223 2 3 - 28430 + 28307 3 4 - 44651 + 44459 4 6 - 13768 + 13727 6 7 - 95692 + 95262 7 790 - 21393 + 21301 @@ -29770,32 +29856,32 @@ 1 2 - 100656 + 100223 2 3 - 28430 + 28307 3 4 - 44651 + 44459 4 6 - 13768 + 13727 6 7 - 95692 + 95262 7 790 - 21393 + 21301 @@ -29811,22 +29897,22 @@ 1 2 - 137206 + 136616 2 3 - 55738 + 55498 3 4 - 102443 + 102003 4 143 - 9204 + 9164 @@ -29836,15 +29922,15 @@ varbind - 6029430 + 6029528 expr - 6029430 + 6029528 var - 768569 + 768581 @@ -29858,7 +29944,7 @@ 1 2 - 6029430 + 6029528 @@ -29874,47 +29960,47 @@ 1 2 - 126228 + 126230 2 3 - 137881 + 137883 3 4 - 106298 + 106300 4 5 - 85215 + 85217 5 6 - 61292 + 61293 6 7 - 48115 + 48116 7 9 - 59624 + 59625 9 13 - 59274 + 59275 13 28 - 58883 + 58884 28 @@ -29929,15 +30015,15 @@ funbind - 3188690 + 3214624 expr - 3182471 + 3208432 fun - 512219 + 510072 @@ -29951,12 +30037,12 @@ 1 2 - 3176253 + 3202241 2 3 - 6218 + 6191 @@ -29972,32 +30058,32 @@ 1 2 - 315736 + 314454 2 3 - 78026 + 77652 3 4 - 31396 + 31261 4 7 - 46153 + 45955 7 121 - 38471 + 38305 123 5011 - 2434 + 2442 @@ -30007,11 +30093,11 @@ expr_allocator - 45951 + 45925 expr - 45951 + 45925 func @@ -30033,7 +30119,7 @@ 1 2 - 45951 + 45925 @@ -30049,7 +30135,7 @@ 1 2 - 45951 + 45925 @@ -30133,11 +30219,11 @@ expr_deallocator - 54613 + 54581 expr - 54613 + 54581 func @@ -30159,7 +30245,7 @@ 1 2 - 54613 + 54581 @@ -30175,7 +30261,7 @@ 1 2 - 54613 + 54581 @@ -30280,15 +30366,15 @@ expr_cond_guard - 657271 + 657281 cond - 657271 + 657281 guard - 657271 + 657281 @@ -30302,7 +30388,7 @@ 1 2 - 657271 + 657281 @@ -30318,7 +30404,7 @@ 1 2 - 657271 + 657281 @@ -30328,15 +30414,15 @@ expr_cond_true - 657268 + 657279 cond - 657268 + 657279 true - 657268 + 657279 @@ -30350,7 +30436,7 @@ 1 2 - 657268 + 657279 @@ -30366,7 +30452,7 @@ 1 2 - 657268 + 657279 @@ -30376,15 +30462,15 @@ expr_cond_false - 657271 + 657281 cond - 657271 + 657281 false - 657271 + 657281 @@ -30398,7 +30484,7 @@ 1 2 - 657271 + 657281 @@ -30414,7 +30500,7 @@ 1 2 - 657271 + 657281 @@ -30424,15 +30510,15 @@ values - 10777241 + 10777417 id - 10777241 + 10777417 str - 88067 + 88069 @@ -30446,7 +30532,7 @@ 1 2 - 10777241 + 10777417 @@ -30462,7 +30548,7 @@ 1 2 - 59548 + 59549 2 @@ -30472,7 +30558,7 @@ 3 6 - 6916 + 6917 6 @@ -30492,15 +30578,15 @@ valuetext - 4757336 + 4757348 id - 4757336 + 4757348 text - 703968 + 703970 @@ -30514,7 +30600,7 @@ 1 2 - 4757336 + 4757348 @@ -30535,12 +30621,12 @@ 2 3 - 102500 + 102501 3 7 - 56769 + 56770 7 @@ -30555,15 +30641,15 @@ valuebind - 11211484 + 11211667 val - 10777241 + 10777417 expr - 11211484 + 11211667 @@ -30577,12 +30663,12 @@ 1 2 - 10365543 + 10365712 2 7 - 411698 + 411704 @@ -30598,7 +30684,7 @@ 1 2 - 11211484 + 11211667 @@ -30608,15 +30694,15 @@ fieldoffsets - 1054750 + 1054767 id - 1054750 + 1054767 byteoffset - 22693 + 22694 bitoffset @@ -30634,7 +30720,7 @@ 1 2 - 1054750 + 1054767 @@ -30650,7 +30736,7 @@ 1 2 - 1054750 + 1054767 @@ -30712,7 +30798,7 @@ 1 2 - 22014 + 22015 2 @@ -30809,19 +30895,19 @@ bitfield - 20693 + 19706 id - 20693 + 19706 bits - 2586 + 2463 declared_bits - 2586 + 2463 @@ -30835,7 +30921,7 @@ 1 2 - 20693 + 19706 @@ -30851,7 +30937,7 @@ 1 2 - 20693 + 19706 @@ -30867,42 +30953,42 @@ 1 2 - 724 + 689 2 3 - 620 + 591 3 4 - 206 + 197 4 5 - 206 + 197 5 6 - 206 + 197 6 8 - 206 + 197 8 11 - 206 + 197 12 115 - 206 + 197 @@ -30918,7 +31004,7 @@ 1 2 - 2586 + 2463 @@ -30934,42 +31020,42 @@ 1 2 - 724 + 689 2 3 - 620 + 591 3 4 - 206 + 197 4 5 - 206 + 197 5 6 - 206 + 197 6 8 - 206 + 197 8 11 - 206 + 197 12 115 - 206 + 197 @@ -30985,7 +31071,7 @@ 1 2 - 2586 + 2463 @@ -30995,23 +31081,23 @@ initialisers - 1710223 + 1710171 init - 1710223 + 1710171 var - 719570 + 719548 expr - 1710223 + 1710171 location - 394513 + 394501 @@ -31025,7 +31111,7 @@ 1 2 - 1710223 + 1710171 @@ -31041,7 +31127,7 @@ 1 2 - 1710223 + 1710171 @@ -31057,7 +31143,7 @@ 1 2 - 1710223 + 1710171 @@ -31073,17 +31159,17 @@ 1 2 - 633825 + 633806 2 15 - 28723 + 28722 16 25 - 57020 + 57019 @@ -31099,17 +31185,17 @@ 1 2 - 633825 + 633806 2 15 - 28723 + 28722 16 25 - 57020 + 57019 @@ -31125,7 +31211,7 @@ 1 2 - 719563 + 719541 2 @@ -31146,7 +31232,7 @@ 1 2 - 1710223 + 1710171 @@ -31162,7 +31248,7 @@ 1 2 - 1710223 + 1710171 @@ -31178,7 +31264,7 @@ 1 2 - 1710223 + 1710171 @@ -31194,17 +31280,17 @@ 1 2 - 321597 + 321587 2 3 - 23956 + 23955 3 15 - 30976 + 30975 15 @@ -31225,12 +31311,12 @@ 1 2 - 344480 + 344470 2 4 - 36086 + 36085 4 @@ -31251,17 +31337,17 @@ 1 2 - 321597 + 321587 2 3 - 23956 + 23955 3 15 - 30976 + 30975 15 @@ -31287,15 +31373,15 @@ expr_ancestor - 477285 + 514901 exp - 477285 + 514901 ancestor - 268993 + 307486 @@ -31309,7 +31395,7 @@ 1 2 - 477285 + 514901 @@ -31325,27 +31411,27 @@ 1 2 - 163963 + 202889 2 3 - 55148 + 54930 3 4 - 22496 + 22400 4 - 6 - 22592 + 7 + 25070 - 6 + 7 26 - 4792 + 2196 @@ -31355,11 +31441,11 @@ exprs - 18388431 + 18388730 id - 18388431 + 18388730 kind @@ -31367,7 +31453,7 @@ location - 8488521 + 8488659 @@ -31381,7 +31467,7 @@ 1 2 - 18388431 + 18388730 @@ -31397,7 +31483,7 @@ 1 2 - 18388431 + 18388730 @@ -31575,22 +31661,22 @@ 1 2 - 7145513 + 7145629 2 3 - 663064 + 663075 3 18 - 638135 + 638145 18 71656 - 41807 + 41808 @@ -31606,17 +31692,17 @@ 1 2 - 7251587 + 7251705 2 3 - 618273 + 618283 3 32 - 618661 + 618671 @@ -31626,19 +31712,19 @@ expr_reuse - 333955 + 372471 reuse - 333955 + 372471 original - 333955 + 372452 value_category - 19 + 37 @@ -31652,7 +31738,7 @@ 1 2 - 333955 + 372471 @@ -31668,7 +31754,7 @@ 1 2 - 333955 + 372471 @@ -31684,7 +31770,12 @@ 1 2 - 333955 + 372433 + + + 2 + 3 + 18 @@ -31700,7 +31791,7 @@ 1 2 - 333955 + 372452 @@ -31714,9 +31805,14 @@ 12 - 17561 - 17562 - 19 + 15 + 16 + 18 + + + 19656 + 19657 + 18 @@ -31730,9 +31826,14 @@ 12 - 17561 - 17562 - 19 + 15 + 16 + 18 + + + 19655 + 19656 + 18 @@ -31742,15 +31843,15 @@ expr_types - 18456468 + 18452210 id - 18325931 + 18321703 typeid - 1236717 + 1236464 value_category @@ -31768,12 +31869,12 @@ 1 2 - 18195394 + 18191197 2 3 - 130536 + 130506 @@ -31789,7 +31890,7 @@ 1 2 - 18325931 + 18321703 @@ -31805,42 +31906,42 @@ 1 2 - 448002 + 447977 2 3 - 256901 + 256729 3 4 - 102760 + 102714 4 5 - 84078 + 84159 5 8 - 110166 + 110118 8 14 - 98352 + 98307 14 42 - 93486 + 93532 42 - 125373 - 42967 + 125371 + 42924 @@ -31856,17 +31957,17 @@ 1 2 - 1069040 + 1068826 2 3 - 157261 + 157225 3 4 - 10414 + 10412 @@ -31885,13 +31986,13 @@ 11 - 372581 - 372582 + 372567 + 372568 11 - 1250724 - 1250725 + 1250740 + 1250741 11 @@ -31916,8 +32017,8 @@ 11 - 92889 - 92890 + 92892 + 92893 11 @@ -31928,15 +32029,15 @@ new_allocated_type - 46995 + 46968 expr - 46995 + 46968 type_id - 27793 + 27777 @@ -31950,7 +32051,7 @@ 1 2 - 46995 + 46968 @@ -31966,12 +32067,12 @@ 1 2 - 11618 + 11611 2 3 - 14714 + 14705 3 @@ -32029,7 +32130,7 @@ 2 3 - 1936 + 1935 3 @@ -33071,15 +33172,15 @@ condition_decl_bind - 40753 + 40577 expr - 40753 + 40577 decl - 40753 + 40577 @@ -33093,7 +33194,7 @@ 1 2 - 40753 + 40577 @@ -33109,7 +33210,7 @@ 1 2 - 40753 + 40577 @@ -33119,15 +33220,15 @@ typeid_bind - 35968 + 35947 expr - 35968 + 35947 type_id - 16175 + 16165 @@ -33141,7 +33242,7 @@ 1 2 - 35968 + 35947 @@ -33157,7 +33258,7 @@ 1 2 - 15757 + 15748 3 @@ -33172,11 +33273,11 @@ uuidof_bind - 20293 + 20292 expr - 20293 + 20292 type_id @@ -33194,7 +33295,7 @@ 1 2 - 20293 + 20292 @@ -33225,11 +33326,11 @@ sizeof_bind - 199194 + 199197 expr - 199194 + 199197 type_id @@ -33247,7 +33348,7 @@ 1 2 - 199194 + 199197 @@ -33356,11 +33457,11 @@ lambdas - 21456 + 21454 expr - 21456 + 21454 default_capture @@ -33382,7 +33483,7 @@ 1 2 - 21456 + 21454 @@ -33398,7 +33499,7 @@ 1 2 - 21456 + 21454 @@ -33472,15 +33573,15 @@ lambda_capture - 27986 + 27983 id - 27986 + 27983 lambda - 20523 + 20521 index @@ -33488,7 +33589,7 @@ field - 27986 + 27983 captured_by_reference @@ -33514,7 +33615,7 @@ 1 2 - 27986 + 27983 @@ -33530,7 +33631,7 @@ 1 2 - 27986 + 27983 @@ -33546,7 +33647,7 @@ 1 2 - 27986 + 27983 @@ -33562,7 +33663,7 @@ 1 2 - 27986 + 27983 @@ -33578,7 +33679,7 @@ 1 2 - 27986 + 27983 @@ -33594,7 +33695,7 @@ 1 2 - 27986 + 27983 @@ -33610,12 +33711,12 @@ 1 2 - 13060 + 13059 2 3 - 7463 + 7462 @@ -33631,12 +33732,12 @@ 1 2 - 13060 + 13059 2 3 - 7463 + 7462 @@ -33652,12 +33753,12 @@ 1 2 - 13060 + 13059 2 3 - 7463 + 7462 @@ -33673,7 +33774,7 @@ 1 2 - 20523 + 20521 @@ -33689,7 +33790,7 @@ 1 2 - 20523 + 20521 @@ -33705,12 +33806,12 @@ 1 2 - 13060 + 13059 2 3 - 7463 + 7462 @@ -33842,7 +33943,7 @@ 1 2 - 27986 + 27983 @@ -33858,7 +33959,7 @@ 1 2 - 27986 + 27983 @@ -33874,7 +33975,7 @@ 1 2 - 27986 + 27983 @@ -33890,7 +33991,7 @@ 1 2 - 27986 + 27983 @@ -33906,7 +34007,7 @@ 1 2 - 27986 + 27983 @@ -33922,7 +34023,7 @@ 1 2 - 27986 + 27983 @@ -34351,19 +34452,19 @@ stmts - 4618654 + 4652754 id - 4618654 + 4652754 kind - 1965 + 1872 location - 2268406 + 2173505 @@ -34377,7 +34478,7 @@ 1 2 - 4618654 + 4652754 @@ -34393,7 +34494,7 @@ 1 2 - 4618654 + 4652754 @@ -34409,97 +34510,97 @@ 1 2 - 103 + 98 18 19 - 103 + 98 22 23 - 103 + 98 - 46 - 47 - 103 + 51 + 52 + 98 - 75 - 76 - 103 + 76 + 77 + 98 - 83 - 84 - 103 + 84 + 85 + 98 - 102 - 103 - 103 + 107 + 108 + 98 - 154 - 155 - 103 + 163 + 164 + 98 - 242 - 243 - 103 + 258 + 259 + 98 - 284 - 285 - 103 + 299 + 300 + 98 - 383 - 384 - 103 + 412 + 413 + 98 - 418 - 419 - 103 + 498 + 499 + 98 - 503 - 504 - 103 + 539 + 540 + 98 - 1326 - 1327 - 103 + 1372 + 1373 + 98 - 2636 - 2637 - 103 + 2811 + 2812 + 98 - 4622 - 4623 - 103 + 4882 + 4883 + 98 - 8806 - 8807 - 103 + 9278 + 9279 + 98 - 11579 - 11580 - 103 + 12170 + 12171 + 98 - 13339 - 13340 - 103 + 14180 + 14181 + 98 @@ -34515,97 +34616,97 @@ 1 2 - 103 + 98 8 9 - 103 + 98 18 19 - 103 + 98 45 46 - 103 + 98 50 51 - 103 + 98 56 57 - 103 + 98 74 75 - 103 - - - 89 - 90 - 103 + 98 101 102 - 103 + 98 - 128 - 129 - 103 + 103 + 104 + 98 - 209 - 210 - 103 + 131 + 132 + 98 + + + 225 + 226 + 98 252 253 - 103 + 98 368 369 - 103 + 98 - 642 - 643 - 103 + 650 + 651 + 98 - 1743 - 1744 - 103 + 1754 + 1755 + 98 - 2190 - 2191 - 103 + 2198 + 2199 + 98 - 4228 - 4229 - 103 + 4253 + 4254 + 98 - 6071 - 6072 - 103 + 6102 + 6103 + 98 - 6567 - 6568 - 103 + 6617 + 6618 + 98 @@ -34621,22 +34722,22 @@ 1 2 - 1878336 + 1726665 2 - 4 - 173927 + 3 + 178637 - 4 - 12 - 174031 + 3 + 8 + 166419 - 12 + 8 689 - 42110 + 101783 @@ -34652,12 +34753,12 @@ 1 2 - 2211706 + 2118820 2 8 - 56699 + 54684 @@ -34763,15 +34864,15 @@ if_initialization - 310 + 295 if_stmt - 310 + 295 init_id - 310 + 295 @@ -34785,7 +34886,7 @@ 1 2 - 310 + 295 @@ -34801,7 +34902,7 @@ 1 2 - 310 + 295 @@ -34811,15 +34912,15 @@ if_then - 725951 + 725963 if_stmt - 725951 + 725963 then_id - 725951 + 725963 @@ -34833,7 +34934,7 @@ 1 2 - 725951 + 725963 @@ -34849,7 +34950,7 @@ 1 2 - 725951 + 725963 @@ -34859,15 +34960,15 @@ if_else - 184679 + 184682 if_stmt - 184679 + 184682 else_id - 184679 + 184682 @@ -34881,7 +34982,7 @@ 1 2 - 184679 + 184682 @@ -34897,7 +34998,7 @@ 1 2 - 184679 + 184682 @@ -34907,15 +35008,15 @@ constexpr_if_initialization - 2 + 3 constexpr_if_stmt - 2 + 3 init_id - 2 + 3 @@ -34929,7 +35030,7 @@ 1 2 - 2 + 3 @@ -34945,7 +35046,7 @@ 1 2 - 2 + 3 @@ -34955,15 +35056,15 @@ constexpr_if_then - 52043 + 53108 constexpr_if_stmt - 52043 + 53108 then_id - 52043 + 53108 @@ -34977,7 +35078,7 @@ 1 2 - 52043 + 53108 @@ -34993,7 +35094,7 @@ 1 2 - 52043 + 53108 @@ -35003,15 +35104,15 @@ constexpr_if_else - 30522 + 30840 constexpr_if_stmt - 30522 + 30840 else_id - 30522 + 30840 @@ -35025,7 +35126,7 @@ 1 2 - 30522 + 30840 @@ -35041,7 +35142,7 @@ 1 2 - 30522 + 30840 @@ -35051,15 +35152,15 @@ while_body - 29141 + 29134 while_stmt - 29141 + 29134 body_id - 29141 + 29134 @@ -35073,7 +35174,7 @@ 1 2 - 29141 + 29134 @@ -35089,7 +35190,7 @@ 1 2 - 29141 + 29134 @@ -35099,15 +35200,15 @@ do_body - 148881 + 148884 do_stmt - 148881 + 148884 body_id - 148881 + 148884 @@ -35121,7 +35222,7 @@ 1 2 - 148881 + 148884 @@ -35137,7 +35238,7 @@ 1 2 - 148881 + 148884 @@ -35147,15 +35248,15 @@ switch_initialization - 6 + 8 switch_stmt - 6 + 8 init_id - 6 + 8 @@ -35169,7 +35270,7 @@ 1 2 - 6 + 8 @@ -35185,7 +35286,7 @@ 1 2 - 6 + 8 @@ -35195,19 +35296,19 @@ switch_case - 207702 + 206808 switch_stmt - 11029 + 10982 index - 4678 + 4658 case_id - 207702 + 206808 @@ -35221,57 +35322,57 @@ 2 3 - 57 + 56 3 4 - 2396 + 2385 4 5 - 1768 + 1760 5 6 - 1045 + 1041 6 8 - 988 + 984 8 9 - 532 + 530 9 10 - 1026 + 1022 10 11 - 361 + 359 11 14 - 1007 + 1003 14 31 - 931 + 927 36 247 - 912 + 908 @@ -35287,57 +35388,57 @@ 2 3 - 57 + 56 3 4 - 2396 + 2385 4 5 - 1768 + 1760 5 6 - 1045 + 1041 6 8 - 988 + 984 8 9 - 532 + 530 9 10 - 1026 + 1022 10 11 - 361 + 359 11 14 - 1007 + 1003 14 31 - 931 + 927 36 247 - 912 + 908 @@ -35353,32 +35454,32 @@ 14 15 - 1236 + 1230 19 20 - 570 + 568 33 34 - 2015 + 2007 34 63 - 399 + 397 68 304 - 361 + 359 358 581 - 95 + 94 @@ -35394,32 +35495,32 @@ 14 15 - 1236 + 1230 19 20 - 570 + 568 33 34 - 2015 + 2007 34 63 - 399 + 397 68 304 - 361 + 359 358 581 - 95 + 94 @@ -35435,7 +35536,7 @@ 1 2 - 207702 + 206808 @@ -35451,7 +35552,7 @@ 1 2 - 207702 + 206808 @@ -35461,15 +35562,15 @@ switch_body - 20787 + 20788 switch_stmt - 20787 + 20788 body_id - 20787 + 20788 @@ -35483,7 +35584,7 @@ 1 2 - 20787 + 20788 @@ -35499,7 +35600,7 @@ 1 2 - 20787 + 20788 @@ -35509,15 +35610,15 @@ for_initialization - 53406 + 53407 for_stmt - 53406 + 53407 init_id - 53406 + 53407 @@ -35531,7 +35632,7 @@ 1 2 - 53406 + 53407 @@ -35547,7 +35648,7 @@ 1 2 - 53406 + 53407 @@ -35557,15 +35658,15 @@ for_condition - 55671 + 55672 for_stmt - 55671 + 55672 condition_id - 55671 + 55672 @@ -35579,7 +35680,7 @@ 1 2 - 55671 + 55672 @@ -35595,7 +35696,7 @@ 1 2 - 55671 + 55672 @@ -35605,15 +35706,15 @@ for_update - 53509 + 53510 for_stmt - 53509 + 53510 update_id - 53509 + 53510 @@ -35627,7 +35728,7 @@ 1 2 - 53509 + 53510 @@ -35643,7 +35744,7 @@ 1 2 - 53509 + 53510 @@ -35653,15 +35754,15 @@ for_body - 61559 + 61560 for_stmt - 61559 + 61560 body_id - 61559 + 61560 @@ -35675,7 +35776,7 @@ 1 2 - 61559 + 61560 @@ -35691,7 +35792,7 @@ 1 2 - 61559 + 61560 @@ -35701,19 +35802,19 @@ stmtparents - 4054557 + 4054504 id - 4054557 + 4054504 index - 12327 + 12326 parent - 1721299 + 1721253 @@ -35727,7 +35828,7 @@ 1 2 - 4054557 + 4054504 @@ -35743,7 +35844,7 @@ 1 2 - 4054557 + 4054504 @@ -35803,7 +35904,7 @@ 77 - 195140 + 195141 704 @@ -35864,7 +35965,7 @@ 77 - 195140 + 195141 704 @@ -35881,27 +35982,27 @@ 1 2 - 989142 + 989112 2 3 - 372562 + 372551 3 4 - 105701 + 105697 4 6 - 111255 + 111251 6 17 - 130355 + 130357 17 @@ -35922,27 +36023,27 @@ 1 2 - 989142 + 989112 2 3 - 372562 + 372551 3 4 - 105701 + 105697 4 6 - 111255 + 111251 6 17 - 130355 + 130357 17 @@ -35957,30 +36058,30 @@ ishandler - 62736 + 62466 block - 62736 + 62466 stmt_decl_bind - 580797 + 580812 stmt - 540979 + 541032 num - 75 + 74 decl - 580692 + 580708 @@ -35994,12 +36095,12 @@ 1 2 - 520271 + 520345 2 19 - 20707 + 20687 @@ -36015,12 +36116,12 @@ 1 2 - 520271 + 520345 2 19 - 20707 + 20687 @@ -36099,18 +36200,18 @@ 4 - 2570 - 2571 + 2571 + 2572 4 - 4968 - 4969 + 4969 + 4970 4 - 129790 - 129791 + 129953 + 129954 4 @@ -36190,18 +36291,18 @@ 4 - 2570 - 2571 + 2571 + 2572 4 - 4968 - 4969 + 4969 + 4970 4 - 129765 - 129766 + 129928 + 129929 4 @@ -36218,7 +36319,7 @@ 1 2 - 580655 + 580671 2 @@ -36239,7 +36340,7 @@ 1 2 - 580692 + 580708 @@ -36249,19 +36350,19 @@ stmt_decl_entry_bind - 523673 + 580812 stmt - 484155 + 541032 num - 75 + 74 decl_entry - 523614 + 580754 @@ -36275,12 +36376,12 @@ 1 2 - 463710 + 520345 2 19 - 20444 + 20687 @@ -36296,12 +36397,12 @@ 1 2 - 463710 + 520345 2 19 - 20444 + 20687 @@ -36380,18 +36481,18 @@ 4 - 2561 - 2562 + 2571 + 2572 4 - 4905 - 4906 + 4969 + 4970 4 - 116157 - 116158 + 129953 + 129954 4 @@ -36471,18 +36572,18 @@ 4 - 2561 - 2562 + 2571 + 2572 4 - 4905 - 4906 + 4969 + 4970 4 - 116143 - 116144 + 129939 + 129940 4 @@ -36499,7 +36600,7 @@ 1 2 - 523593 + 580733 3 @@ -36520,7 +36621,7 @@ 1 2 - 523614 + 580754 @@ -36530,15 +36631,15 @@ blockscope - 1415642 + 1415522 block - 1415642 + 1415522 enclosing - 1300432 + 1300321 @@ -36552,7 +36653,7 @@ 1 2 - 1415642 + 1415522 @@ -36568,12 +36669,12 @@ 1 2 - 1235130 + 1235025 2 13 - 65301 + 65295 @@ -36583,11 +36684,11 @@ jumpinfo - 254469 + 254474 id - 254469 + 254474 str @@ -36595,7 +36696,7 @@ target - 53144 + 53145 @@ -36609,7 +36710,7 @@ 1 2 - 254469 + 254474 @@ -36625,7 +36726,7 @@ 1 2 - 254469 + 254474 @@ -36723,7 +36824,7 @@ 2 3 - 26477 + 26478 3 @@ -36733,7 +36834,7 @@ 4 5 - 5352 + 5353 5 @@ -36759,7 +36860,7 @@ 1 2 - 53144 + 53145 @@ -36769,19 +36870,19 @@ preprocdirects - 4386889 + 4186401 id - 4386889 + 4186401 kind - 1138 + 5130 location - 4384302 + 4145824 @@ -36795,7 +36896,7 @@ 1 2 - 4386889 + 4186401 @@ -36811,7 +36912,7 @@ 1 2 - 4386889 + 4186401 @@ -36825,59 +36926,59 @@ 12 - 1 - 2 - 103 + 4 + 5 + 466 - 122 - 123 - 103 + 54 + 55 + 466 - 694 - 695 - 103 + 151 + 152 + 466 - 799 - 800 - 103 + 448 + 449 + 466 - 932 - 933 - 103 + 554 + 555 + 466 - 1689 - 1690 - 103 + 564 + 565 + 466 - 1792 - 1793 - 103 + 571 + 572 + 466 - 3012 - 3013 - 103 + 667 + 668 + 466 - 3802 - 3803 - 103 + 1429 + 1430 + 466 - 6290 - 6291 - 103 + 1970 + 1971 + 466 - 23266 - 23267 - 103 + 2564 + 2565 + 466 @@ -36891,59 +36992,59 @@ 12 - 1 - 2 - 103 + 4 + 5 + 466 - 122 - 123 - 103 + 54 + 55 + 466 - 694 - 695 - 103 + 151 + 152 + 466 - 799 - 800 - 103 + 448 + 449 + 466 - 932 - 933 - 103 + 554 + 555 + 466 - 1689 - 1690 - 103 + 564 + 565 + 466 - 1792 - 1793 - 103 + 571 + 572 + 466 - 3012 - 3013 - 103 + 667 + 668 + 466 - 3802 - 3803 - 103 + 1429 + 1430 + 466 - 6290 - 6291 - 103 + 1883 + 1884 + 466 - 23241 - 23242 - 103 + 2564 + 2565 + 466 @@ -36959,12 +37060,12 @@ 1 2 - 4384198 + 4145358 - 26 - 27 - 103 + 88 + 89 + 466 @@ -36980,7 +37081,7 @@ 1 2 - 4384302 + 4145824 @@ -36990,15 +37091,15 @@ preprocpair - 1430102 + 1429980 begin - 1195950 + 1195848 elseelifend - 1430102 + 1429980 @@ -37012,17 +37113,17 @@ 1 2 - 977656 + 977573 2 3 - 208031 + 208014 3 11 - 10261 + 10260 @@ -37038,7 +37139,7 @@ 1 2 - 1430102 + 1429980 @@ -37048,41 +37149,41 @@ preproctrue - 766359 + 766294 branch - 766359 + 766294 preprocfalse - 331171 + 331143 branch - 331171 + 331143 preproctext - 3537219 + 3368495 id - 3537219 + 3368495 head - 2563493 + 2441215 body - 1498199 + 1426735 @@ -37096,7 +37197,7 @@ 1 2 - 3537219 + 3368495 @@ -37112,7 +37213,7 @@ 1 2 - 3537219 + 3368495 @@ -37128,12 +37229,12 @@ 1 2 - 2417708 + 2302384 2 740 - 145784 + 138830 @@ -37149,12 +37250,12 @@ 1 2 - 2501827 + 2382490 2 5 - 61666 + 58724 @@ -37170,17 +37271,17 @@ 1 2 - 1356242 + 1291550 2 6 - 112364 + 107005 6 11630 - 29591 + 28179 @@ -37196,17 +37297,17 @@ 1 2 - 1359243 + 1294407 2 7 - 112675 + 107300 7 2980 - 26280 + 25026 @@ -37216,15 +37317,15 @@ includes - 312980 + 312954 id - 312980 + 312954 included - 117076 + 117066 @@ -37238,7 +37339,7 @@ 1 2 - 312980 + 312954 @@ -37254,32 +37355,32 @@ 1 2 - 61103 + 61098 2 3 - 21922 + 21920 3 4 - 12593 + 12592 4 6 - 10261 + 10260 6 14 - 8862 + 8861 14 47 - 2332 + 2331 @@ -37289,15 +37390,15 @@ link_targets - 817 + 814 id - 817 + 814 binary - 817 + 814 @@ -37311,7 +37412,7 @@ 1 2 - 817 + 814 @@ -37327,7 +37428,7 @@ 1 2 - 817 + 814 @@ -37337,11 +37438,11 @@ link_parent - 38867468 + 38845246 element - 4926386 + 4923570 link_target @@ -37359,17 +37460,17 @@ 1 2 - 664089 + 663709 2 9 - 25845 + 25830 9 10 - 4236452 + 4234029 diff --git a/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme b/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme new file mode 100644 index 000000000000..abfce5c170f9 --- /dev/null +++ b/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme @@ -0,0 +1,2251 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..3d35dd6b50ed --- /dev/null +++ b/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme @@ -0,0 +1,2289 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties b/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties new file mode 100644 index 000000000000..db0e7e92d0e9 --- /dev/null +++ b/cpp/ql/lib/upgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties @@ -0,0 +1,2 @@ +description: Add new builtin operations +compatibility: backwards diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index badaa459be17..9f10be7db909 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 1.1.0 + +### Query Metadata Changes + +* The precision of `cpp/iterator-to-expired-container` ("Iterator to expired container") has been increased to `high`. As a result, it will be run by default as part of the Code Scanning suite. +* The precision of `cpp/unsafe-strncat` ("Potentially unsafe call to strncat") has been increased to `high`. As a result, it will be run by default as part of the Code Scanning suite. + +### Minor Analysis Improvements + +* The `cpp/unsigned-difference-expression-compared-zero` ("Unsigned difference expression compared to zero") query now produces fewer false positives. + ## 1.0.3 No user-facing changes. diff --git a/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql b/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql index 492315ad8b73..e38bfbf562be 100644 --- a/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql +++ b/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql @@ -172,5 +172,5 @@ where not arg.isFromUninstantiatedTemplate(_) and not actual.getUnspecifiedType() instanceof ErroneousType select arg, - "This argument should be of type '" + expected.getName() + "' but is of type '" + + "This format specifier for type '" + expected.getName() + "' does not match the argument type '" + actual.getUnspecifiedType().getName() + "'." diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.cpp b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.cpp deleted file mode 100644 index bf9822d5fd88..000000000000 --- a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.cpp +++ /dev/null @@ -1,7 +0,0 @@ -Record* fixRecord(Record* r) { - Record myRecord = *r; - delete r; - - myRecord.fix(); - return &myRecord; //returns reference to myRecord, which is a stack-allocated object -} \ No newline at end of file diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.qhelp b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.qhelp index 0c59a36199e0..a5bc20ffe970 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.qhelp +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.qhelp @@ -5,22 +5,23 @@ -

This rule finds return statements that return pointers to an object allocated on the stack. -The lifetime of a stack allocated memory location only lasts until the function returns, and -the contents of that memory become undefined after that. Clearly, using a pointer to stack +

This rule finds return statements that return pointers to an object allocated on the stack. +The lifetime of a stack allocated memory location only lasts until the function returns, and +the contents of that memory become undefined after that. Clearly, using a pointer to stack memory after the function has already returned will have undefined results.

-

Use the functions of the malloc family to dynamically allocate memory on the heap for data that is used across function calls.

+

Use the functions of the malloc family, or new, to dynamically allocate memory on the heap for data that is used across function calls.

- - - - - + +

The following example allocates an object on the stack and returns a pointer to it. This is incorrect because the object is deallocated +when the function returns, and the pointer becomes invalid.

+ +

To fix this, allocate the object on the heap using new and return a pointer to the heap-allocated object.

+
diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemoryBad.cpp b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemoryBad.cpp new file mode 100644 index 000000000000..196410d840f3 --- /dev/null +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemoryBad.cpp @@ -0,0 +1,5 @@ +Record *mkRecord(int value) { + Record myRecord(value); + + return &myRecord; // BAD: returns a pointer to `myRecord`, which is a stack-allocated object. +} diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemoryGood.cpp b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemoryGood.cpp new file mode 100644 index 000000000000..e888a7fbfe2c --- /dev/null +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemoryGood.cpp @@ -0,0 +1,5 @@ +Record *mkRecord(int value) { + Record *myRecord = new Record(value); + + return myRecord; // GOOD: returns a pointer to a `myRecord`, which is a heap-allocated object. +} diff --git a/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql b/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql index 37ad8fd70766..32c486f0c3ab 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql @@ -4,7 +4,7 @@ * @kind problem * @problem.severity warning * @security-severity 9.3 - * @precision medium + * @precision high * @id cpp/unsafe-strncat * @tags reliability * correctness diff --git a/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.c b/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.c index d2f2b76fddc5..38ecc79ef2d6 100644 --- a/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.c +++ b/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.c @@ -1,5 +1,14 @@ -unsigned limit = get_limit(); -unsigned total = 0; -while (limit - total > 0) { // wrong: if `total` is greater than `limit` this will underflow and continue executing the loop. +uint32_t limit = get_limit(); +uint32_t total = 0; + +while (limit - total > 0) { // BAD: if `total` is greater than `limit` this will underflow and continue executing the loop. total += get_data(); -} \ No newline at end of file +} + +while (total < limit) { // GOOD: never underflows here because there is no arithmetic. + total += get_data(); +} + +while ((int64_t)limit - total > 0) { // GOOD: never underflows here because the result always fits in an `int64_t`. + total += get_data(); +} diff --git a/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.ql b/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.ql index 5f7d88e9a716..61ee5d4cad1d 100644 --- a/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.ql +++ b/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.ql @@ -17,6 +17,7 @@ import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis import semmle.code.cpp.rangeanalysis.RangeAnalysisUtils import semmle.code.cpp.controlflow.Guards import semmle.code.cpp.ir.dataflow.DataFlow +import semmle.code.cpp.valuenumbering.GlobalValueNumbering /** * Holds if `sub` is guarded by a condition which ensures that @@ -34,45 +35,108 @@ predicate isGuarded(SubExpr sub, Expr left, Expr right) { } /** - * Holds if `n` is known or suspected to be less than or equal to - * `sub.getLeftOperand()`. + * Gets an expression that is less than or equal to `sub.getLeftOperand()`. + * These serve as the base cases for `exprIsSubLeftOrLess`. */ -predicate exprIsSubLeftOrLess(SubExpr sub, DataFlow::Node n) { +Expr exprIsLeftOrLessBase(SubExpr sub) { interestingSubExpr(sub, _) and // Manual magic - ( - n.asExpr() = sub.getLeftOperand() + exists(Expr e | globalValueNumber(e).getAnExpr() = sub.getLeftOperand() | + // sub = e - x + // result = e + // so: + // result <= e + result = e + or + // sub = e - x + // result = e & y + // so: + // result = e & y <= e + result.(BitwiseAndExpr).getAnOperand() = e or - exists(DataFlow::Node other | - // dataflow - exprIsSubLeftOrLess(sub, other) and - ( - DataFlow::localFlowStep(n, other) or - DataFlow::localFlowStep(other, n) - ) + exists(SubExpr s | + // sub = e - x + // result = s + // s = e - y + // y >= 0 + // so: + // result = e - y <= e + result = s and + s.getLeftOperand() = e and + lowerBound(s.getRightOperand().getFullyConverted()) >= 0 ) or - exists(DataFlow::Node other | - // guard constraining `sub` - exprIsSubLeftOrLess(sub, other) and - isGuarded(sub, other.asExpr(), n.asExpr()) // other >= n + exists(Expr other | + // sub = e - x + // result = a + // a = e + y + // y <= 0 + // so: + // result = e + y <= e + 0 = e + result.(AddExpr).hasOperands(e, other) and + upperBound(other.getFullyConverted()) <= 0 ) or - exists(DataFlow::Node other, float p, float q | - // linear access of `other` - exprIsSubLeftOrLess(sub, other) and - linearAccess(n.asExpr(), other.asExpr(), p, q) and // n = p * other + q - p <= 1 and - q <= 0 + exists(DivExpr d | + // sub = e - x + // result = d + // d = e / y + // y >= 1 + // so: + // result = e / y <= e / 1 = e + result = d and + d.getLeftOperand() = e and + lowerBound(d.getRightOperand().getFullyConverted()) >= 1 ) or - exists(DataFlow::Node other, float p, float q | - // linear access of `n` - exprIsSubLeftOrLess(sub, other) and - linearAccess(other.asExpr(), n.asExpr(), p, q) and // other = p * n + q - p >= 1 and - q >= 0 + exists(RShiftExpr rs | + // sub = e - x + // result = rs + // rs = e >> y + // so: + // result = e >> y <= e + result = rs and + rs.getLeftOperand() = e + ) + ) +} + +/** + * Holds if `n` is known or suspected to be less than or equal to + * `sub.getLeftOperand()`. + */ +predicate exprIsSubLeftOrLess(SubExpr sub, DataFlow::Node n) { + n.asExpr() = exprIsLeftOrLessBase(sub) + or + exists(DataFlow::Node other | + // dataflow + exprIsSubLeftOrLess(sub, other) and + ( + DataFlow::localFlowStep(n, other) or + DataFlow::localFlowStep(other, n) ) ) + or + exists(DataFlow::Node other | + // guard constraining `sub` + exprIsSubLeftOrLess(sub, other) and + isGuarded(sub, other.asExpr(), n.asExpr()) // other >= n + ) + or + exists(DataFlow::Node other, float p, float q | + // linear access of `other` + exprIsSubLeftOrLess(sub, other) and + linearAccess(n.asExpr(), other.asExpr(), p, q) and // n = p * other + q + p <= 1 and + q <= 0 + ) + or + exists(DataFlow::Node other, float p, float q | + // linear access of `n` + exprIsSubLeftOrLess(sub, other) and + linearAccess(other.asExpr(), n.asExpr(), p, q) and // other = p * n + q + p >= 1 and + q >= 0 + ) } predicate interestingSubExpr(SubExpr sub, RelationalOperation ro) { diff --git a/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRaceBad.c b/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRaceBad.c index 03e8a82a38c6..993364a54d44 100644 --- a/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRaceBad.c +++ b/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRaceBad.c @@ -1,15 +1,17 @@ char *file_name; FILE *f_ptr; - + /* Initialize file_name */ - + f_ptr = fopen(file_name, "w"); if (f_ptr == NULL) { /* Handle error */ } - + /* ... */ - + if (chmod(file_name, S_IRUSR) == -1) { /* Handle error */ -} \ No newline at end of file +} + +fclose(f_ptr); diff --git a/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRaceGood.c b/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRaceGood.c index bf14cffbd4d3..4e5fb19a03fb 100644 --- a/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRaceGood.c +++ b/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRaceGood.c @@ -1,8 +1,8 @@ char *file_name; int fd; - + /* Initialize file_name */ - + fd = open( file_name, O_WRONLY | O_CREAT | O_EXCL, @@ -11,9 +11,11 @@ fd = open( if (fd == -1) { /* Handle error */ } - + /* ... */ - + if (fchmod(fd, S_IRUSR) == -1) { /* Handle error */ -} \ No newline at end of file +} + +close(fd); diff --git a/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql b/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql index 139555cfa1d6..11d628c1affa 100644 --- a/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql +++ b/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql @@ -2,7 +2,7 @@ * @name Iterator to expired container * @description Using an iterator owned by a container whose lifetime has expired may lead to unexpected behavior. * @kind problem - * @precision medium + * @precision high * @id cpp/iterator-to-expired-container * @problem.severity warning * @security-severity 8.8 diff --git a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.cpp b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.cpp index 055aadcedb65..446cb14befa9 100644 --- a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.cpp +++ b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.cpp @@ -34,7 +34,7 @@ void good1(std::size_t length) noexcept { // GOOD: the allocation failure is handled appropriately. void good2(std::size_t length) noexcept { - int* dest = new int[length]; + int* dest = new(std::nothrow) int[length]; if(!dest) { return; } diff --git a/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.c b/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.c index b015770ad80b..f4c544445c06 100644 --- a/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.c +++ b/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.c @@ -1,11 +1,38 @@ void write_default_config_bad() { // BAD - this is world-writable so any user can overwrite the config int out = creat(OUTFILE, 0666); - dprintf(out, DEFAULT_CONFIG); + if (out < 0) { + // handle error + } + + dprintf(out, "%s", DEFAULT_CONFIG); + close(out); } void write_default_config_good() { // GOOD - this allows only the current user to modify the file int out = creat(OUTFILE, S_IWUSR | S_IRUSR); - dprintf(out, DEFAULT_CONFIG); + if (out < 0) { + // handle error + } + + dprintf(out, "%s", DEFAULT_CONFIG); + close(out); +} + +void write_default_config_good_2() { + // GOOD - this allows only the current user to modify the file + int out = open(OUTFILE, O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR); + if (out < 0) { + // handle error + } + + FILE *fd = fdopen(out, "w"); + if (fd == NULL) { + close(out); + // handle error + } + + fprintf(fd, "%s", DEFAULT_CONFIG); + fclose(fd); } diff --git a/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.qhelp b/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.qhelp index 6ee951490414..58a5a55f5092 100644 --- a/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.qhelp +++ b/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.qhelp @@ -29,10 +29,11 @@ so it is important that they cannot be controlled by an attacker.

-The first example creates the default configuration file with the usual "default" Unix permissions, 0666. This makes the +The first example creates the default configuration file with the usual "default" Unix permissions, 0666. This makes the file world-writable, so that an attacker could write in their own configuration that would be read by the program. The second example uses more restrictive permissions: a combination of the standard Unix constants S_IWUSR and S_IRUSR which means that -only the current user will have read and write access to the file. +only the current user will have read and write access to the file. The third example shows another way to create a file with more restrictive +permissions if a FILE * stream pointer is required rather than a file descriptor.

diff --git a/cpp/ql/src/change-notes/released/1.1.0.md b/cpp/ql/src/change-notes/released/1.1.0.md new file mode 100644 index 000000000000..50e703a5814a --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.1.0.md @@ -0,0 +1,10 @@ +## 1.1.0 + +### Query Metadata Changes + +* The precision of `cpp/iterator-to-expired-container` ("Iterator to expired container") has been increased to `high`. As a result, it will be run by default as part of the Code Scanning suite. +* The precision of `cpp/unsafe-strncat` ("Potentially unsafe call to strncat") has been increased to `high`. As a result, it will be run by default as part of the Code Scanning suite. + +### Minor Analysis Improvements + +* The `cpp/unsigned-difference-expression-compared-zero` ("Unsigned difference expression compared to zero") query now produces fewer false positives. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 06fa75b96cbc..2ac15439f561 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.1.0 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index ccdcb00ec6eb..179bbafe4ac8 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.0.3 +version: 1.1.0 groups: - cpp - queries diff --git a/cpp/ql/test/library-tests/array_sizes/arr2.expected b/cpp/ql/test/library-tests/array_sizes/arr2.expected index 959f04358288..d48fdf2e5b09 100644 --- a/cpp/ql/test/library-tests/array_sizes/arr2.expected +++ b/cpp/ql/test/library-tests/array_sizes/arr2.expected @@ -1,5 +1,11 @@ | file://:0:0:0:0 | char[6] | 6 | | file://:0:0:0:0 | char[26] | 26 | +| file://:0:0:0:0 | char[] | | +| file://:0:0:0:0 | const char[6] | 6 | +| file://:0:0:0:0 | double[0] | 0 | +| file://:0:0:0:0 | double[3] | 3 | +| file://:0:0:0:0 | double[4] | 4 | +| file://:0:0:0:0 | double[] | | | file://:0:0:0:0 | int[1] | 1 | | file://:0:0:0:0 | int[11] | 11 | | file://:0:0:0:0 | long[] | | diff --git a/cpp/ql/test/library-tests/array_sizes/implicit_sizes.cpp b/cpp/ql/test/library-tests/array_sizes/implicit_sizes.cpp new file mode 100644 index 000000000000..e2a6b14669c5 --- /dev/null +++ b/cpp/ql/test/library-tests/array_sizes/implicit_sizes.cpp @@ -0,0 +1,10 @@ +// semmle-extractor-options: -std=c++20 +double a1[]{1,2,3}; +double* p1 = new double[]{1,2,3}; +double* p2 = new double[0]{}; +double* p3 = new double[]{}; +char c[]{"Hello"}; +char* d = new char[]{"Hello"}; +double a2[](1,2,3); +double* p4 = new double[](1,2,3); +double* p5 = new double[4]{1,2}; // Size mismatch diff --git a/cpp/ql/test/library-tests/array_sizes/new.expected b/cpp/ql/test/library-tests/array_sizes/new.expected new file mode 100644 index 000000000000..7275eeb8c1e5 --- /dev/null +++ b/cpp/ql/test/library-tests/array_sizes/new.expected @@ -0,0 +1,6 @@ +| implicit_sizes.cpp:3:14:3:32 | new[] | 3 | +| implicit_sizes.cpp:4:14:4:28 | new[] | 0 | +| implicit_sizes.cpp:5:14:5:27 | new[] | 0 | +| implicit_sizes.cpp:7:11:7:29 | new[] | 6 | +| implicit_sizes.cpp:9:14:9:32 | new[] | 3 | +| implicit_sizes.cpp:10:14:10:31 | new[] | 4 | diff --git a/cpp/ql/test/library-tests/array_sizes/new.ql b/cpp/ql/test/library-tests/array_sizes/new.ql new file mode 100644 index 000000000000..6282687cfce5 --- /dev/null +++ b/cpp/ql/test/library-tests/array_sizes/new.ql @@ -0,0 +1,4 @@ +import cpp + +from NewArrayExpr nae +select nae, nae.getArraySize() diff --git a/cpp/ql/test/library-tests/atomic/variables.expected b/cpp/ql/test/library-tests/atomic/variables.expected index eb76e9c25ed2..ccd92c70f6de 100644 --- a/cpp/ql/test/library-tests/atomic/variables.expected +++ b/cpp/ql/test/library-tests/atomic/variables.expected @@ -1,7 +1,5 @@ | (unnamed parameter 0) | __va_list_tag && | rvalue reference to {struct __va_list_tag} | -| (unnamed parameter 0) | atomic_box && | rvalue reference to {struct atomic_box} | | (unnamed parameter 0) | const __va_list_tag & | reference to {const {struct __va_list_tag}} | -| (unnamed parameter 0) | const atomic_box & | reference to {const {struct atomic_box}} | | a | _Atomic(int) | atomic {int} | | b | _Atomic(int) | atomic {int} | | c | _Atomic(int) * | pointer to {atomic {int}} | diff --git a/cpp/ql/test/library-tests/builtins/type_traits/clang.cpp b/cpp/ql/test/library-tests/builtins/type_traits/clang.cpp index 2c25f1881382..167023c1a33c 100644 --- a/cpp/ql/test/library-tests/builtins/type_traits/clang.cpp +++ b/cpp/ql/test/library-tests/builtins/type_traits/clang.cpp @@ -1,4 +1,4 @@ -// semmle-extractor-options: --clang --clang_version 100000 +// semmle-extractor-options: --clang --clang_version 180000 struct S { void f() {} @@ -93,3 +93,18 @@ struct S2 { bool bok_is_trivial1 = __is_trivial(int); bool bok_is_trivial2 = __is_trivial(S2); + +bool bok_reference_binds_to_temporary1 = __reference_binds_to_temporary(int&, long&); +bool bok_reference_binds_to_temporary2 = __reference_binds_to_temporary(int const &, long&); + +bool b_is_same_as1 = __is_same_as(int, int); +bool b_is_same_as2 = __is_same_as(int, float); + +bool b_is_bounded_array1 = __is_bounded_array(int[]); +bool b_is_bounded_array2 = __is_bounded_array(int[42]); + +bool b_is_unbounded_array1 = __is_unbounded_array(int[]); +bool b_is_unbounded_array2 = __is_unbounded_array(int[42]); + +bool b_is_referenceable1 = __is_referenceable(int); +bool b_is_referenceable2 = __is_referenceable(void); diff --git a/cpp/ql/test/library-tests/builtins/type_traits/expr.expected b/cpp/ql/test/library-tests/builtins/type_traits/expr.expected index 9cc6ec6ec929..edf63baef9e9 100644 --- a/cpp/ql/test/library-tests/builtins/type_traits/expr.expected +++ b/cpp/ql/test/library-tests/builtins/type_traits/expr.expected @@ -125,9 +125,78 @@ | clang.cpp:94:24:94:40 | int | | | | clang.cpp:95:24:95:39 | S2 | | | | clang.cpp:95:24:95:39 | __is_trivial | S2 | 0 | +| clang.cpp:97:42:97:84 | __reference_binds_to_temporary | int &,long & | 0 | +| clang.cpp:97:42:97:84 | int & | | | +| clang.cpp:97:42:97:84 | long & | | | +| clang.cpp:98:42:98:91 | __reference_binds_to_temporary | const int &,long & | 1 | +| clang.cpp:98:42:98:91 | const int & | | | +| clang.cpp:98:42:98:91 | long & | | | +| clang.cpp:100:22:100:43 | __is_same_as | int,int | 1 | +| clang.cpp:100:22:100:43 | int | | | +| clang.cpp:100:22:100:43 | int | | | +| clang.cpp:101:22:101:45 | __is_same_as | int,float | 0 | +| clang.cpp:101:22:101:45 | float | | | +| clang.cpp:101:22:101:45 | int | | | +| clang.cpp:103:28:103:52 | __is_bounded_array | int[] | 0 | +| clang.cpp:103:28:103:52 | int[] | | | +| clang.cpp:104:28:104:54 | __is_bounded_array | int[42] | 1 | +| clang.cpp:104:28:104:54 | int[42] | | | +| clang.cpp:104:51:104:52 | 42 | | 42 | +| clang.cpp:104:51:104:52 | (unsigned long)... | | 42 | +| clang.cpp:106:30:106:56 | __is_unbounded_array | int[] | 1 | +| clang.cpp:106:30:106:56 | int[] | | | +| clang.cpp:107:30:107:58 | __is_unbounded_array | int[42] | 0 | +| clang.cpp:107:30:107:58 | int[42] | | | +| clang.cpp:107:55:107:56 | 42 | | 42 | +| clang.cpp:107:55:107:56 | (unsigned long)... | | 42 | +| clang.cpp:109:28:109:50 | __is_referenceable | int | 1 | +| clang.cpp:109:28:109:50 | int | | | +| clang.cpp:110:28:110:51 | __is_referenceable | void | 0 | +| clang.cpp:110:28:110:51 | void | | | | file://:0:0:0:0 | 0 | | 0 | | file://:0:0:0:0 | 1 | | 1 | | file://:0:0:0:0 | 2 | | 2 | +| gcc.cpp:3:25:3:25 | 8 | | 8 | +| gcc.cpp:4:25:4:59 | 0 | | 0 | +| gcc.cpp:4:25:4:59 | __builtin_has_attribute | v,0 | 1 | +| gcc.cpp:4:49:4:49 | v | | | +| gcc.cpp:5:25:5:62 | 0 | | 0 | +| gcc.cpp:5:25:5:62 | __builtin_has_attribute | v,0 | 0 | +| gcc.cpp:5:49:5:49 | v | | | +| gcc.cpp:13:50:13:111 | __builtin_is_pointer_interconvertible_with_class | i | 1 | +| gcc.cpp:13:99:13:110 | i | | | +| gcc.cpp:14:50:14:111 | __builtin_is_pointer_interconvertible_with_class | d | 0 | +| gcc.cpp:14:99:14:110 | d | | | +| gcc.cpp:16:35:16:95 | __builtin_is_corresponding_member | i,i | 1 | +| gcc.cpp:16:69:16:80 | i | | | +| gcc.cpp:16:83:16:94 | i | | | +| gcc.cpp:17:35:17:95 | __builtin_is_corresponding_member | i,d | 0 | +| gcc.cpp:17:69:17:80 | i | | | +| gcc.cpp:17:83:17:94 | d | | | +| gcc.cpp:19:34:19:67 | __is_nothrow_convertible | int,int | 1 | +| gcc.cpp:19:34:19:67 | int | | | +| gcc.cpp:19:34:19:67 | int | | | +| gcc.cpp:20:34:20:72 | __is_nothrow_convertible | a_struct,int | 0 | +| gcc.cpp:20:34:20:72 | a_struct | | | +| gcc.cpp:20:34:20:72 | int | | | +| gcc.cpp:22:26:22:51 | __is_convertible | int,int | 1 | +| gcc.cpp:22:26:22:51 | int | | | +| gcc.cpp:22:26:22:51 | int | | | +| gcc.cpp:23:26:23:56 | __is_convertible | a_struct,int | 0 | +| gcc.cpp:23:26:23:56 | a_struct | | | +| gcc.cpp:23:26:23:56 | int | | | +| gcc.cpp:25:47:25:95 | __reference_constructs_from_temporary | int &&,int | 1 | +| gcc.cpp:25:47:25:95 | int | | | +| gcc.cpp:25:47:25:95 | int && | | | +| gcc.cpp:26:47:26:97 | __reference_constructs_from_temporary | int &&,int && | 0 | +| gcc.cpp:26:47:26:97 | int && | | | +| gcc.cpp:26:47:26:97 | int && | | | +| gcc.cpp:28:45:28:91 | __reference_converts_from_temporary | int &&,int | 1 | +| gcc.cpp:28:45:28:91 | int | | | +| gcc.cpp:28:45:28:91 | int && | | | +| gcc.cpp:29:45:29:93 | __reference_converts_from_temporary | int &&,int && | 0 | +| gcc.cpp:29:45:29:93 | int && | | | +| gcc.cpp:29:45:29:93 | int && | | | | ms.cpp:38:41:38:45 | 0 | | 0 | | ms.cpp:88:27:88:45 | __has_assign | empty | 0 | | ms.cpp:88:27:88:45 | empty | | | @@ -452,3 +521,38 @@ | ms.cpp:272:51:272:104 | __is_pointer_interconvertible_base_of | empty,abstract | 0 | | ms.cpp:272:51:272:104 | abstract | | | | ms.cpp:272:51:272:104 | empty | | | +| ms.cpp:274:44:274:85 | __is_trivially_copy_assignable | has_assign | 0 | +| ms.cpp:274:44:274:85 | has_assign | | | +| ms.cpp:275:44:275:78 | __is_trivially_copy_assignable | int | 1 | +| ms.cpp:275:44:275:78 | int | | | +| ms.cpp:277:51:277:107 | __is_assignable_no_precondition_check | a_struct,a_struct | 1 | +| ms.cpp:277:51:277:107 | a_struct | | | +| ms.cpp:277:51:277:107 | a_struct | | | +| ms.cpp:278:51:278:104 | __is_assignable_no_precondition_check | a_struct,empty | 0 | +| ms.cpp:278:51:278:104 | a_struct | | | +| ms.cpp:278:51:278:104 | empty | | | +| ms.cpp:279:51:279:102 | __is_assignable_no_precondition_check | a_struct,int | 0 | +| ms.cpp:279:51:279:102 | a_struct | | | +| ms.cpp:279:51:279:102 | int | | | +| ms.cpp:281:54:281:117 | __is_pointer_interconvertible_with_class | a_struct,i | 1 | +| ms.cpp:281:54:281:117 | a_struct | | | +| ms.cpp:281:105:281:116 | i | | | +| ms.cpp:282:54:282:117 | __is_pointer_interconvertible_with_class | a_struct,d | 0 | +| ms.cpp:282:54:282:117 | a_struct | | | +| ms.cpp:282:105:282:116 | d | | | +| ms.cpp:284:39:284:111 | __is_corresponding_member | a_struct,a_struct,i,i | 1 | +| ms.cpp:284:39:284:111 | a_struct | | | +| ms.cpp:284:39:284:111 | a_struct | | | +| ms.cpp:284:85:284:96 | i | | | +| ms.cpp:284:99:284:110 | i | | | +| ms.cpp:285:39:285:111 | __is_corresponding_member | a_struct,a_struct,i,d | 0 | +| ms.cpp:285:39:285:111 | a_struct | | | +| ms.cpp:285:39:285:111 | a_struct | | | +| ms.cpp:285:85:285:96 | i | | | +| ms.cpp:285:99:285:110 | d | | | +| ms.cpp:287:34:287:59 | __is_valid_winrt_type | int | 1 | +| ms.cpp:287:34:287:59 | int | | | +| ms.cpp:288:27:288:45 | __is_win_class | int | 0 | +| ms.cpp:288:27:288:45 | int | | | +| ms.cpp:289:31:289:53 | __is_win_interface | int | 0 | +| ms.cpp:289:31:289:53 | int | | | diff --git a/cpp/ql/test/library-tests/builtins/type_traits/gcc.cpp b/cpp/ql/test/library-tests/builtins/type_traits/gcc.cpp new file mode 100644 index 000000000000..54224343e7e2 --- /dev/null +++ b/cpp/ql/test/library-tests/builtins/type_traits/gcc.cpp @@ -0,0 +1,29 @@ +// semmle-extractor-options: --gnu_version 130000 + +__attribute__ ((aligned(8))) int v; +bool b_has_attribute1 = __builtin_has_attribute(v, aligned); +bool b_has_attribute2 = __builtin_has_attribute(v, aligned(4)); + + +struct a_struct { + int i; + double d; +}; + +bool b_is_pointer_interconvertible_with_class1 = __builtin_is_pointer_interconvertible_with_class(&a_struct::i); +bool b_is_pointer_interconvertible_with_class2 = __builtin_is_pointer_interconvertible_with_class(&a_struct::d); + +bool b_is_corresponding_member1 = __builtin_is_corresponding_member(&a_struct::i, &a_struct::i); +bool b_is_corresponding_member2 = __builtin_is_corresponding_member(&a_struct::i, &a_struct::d); + +bool b_is_nothrow_convertible1 = __is_nothrow_convertible(int, int); +bool b_is_nothrow_convertible2 = __is_nothrow_convertible(a_struct, int); + +bool b_is_convertible1 = __is_convertible(int, int); +bool b_is_convertible2 = __is_convertible(a_struct, int); + +bool b_reference_constructs_from_temporary1 = __reference_constructs_from_temporary(int&&, int); +bool b_reference_constructs_from_temporary2 = __reference_constructs_from_temporary(int&&, int&&); + +bool b_reference_converts_from_temporary1 = __reference_converts_from_temporary(int&&, int); +bool b_reference_converts_from_temporary2 = __reference_converts_from_temporary(int&&, int&&); diff --git a/cpp/ql/test/library-tests/builtins/type_traits/ms.cpp b/cpp/ql/test/library-tests/builtins/type_traits/ms.cpp index 6083f9dc6bb5..d51248dd3ec8 100644 --- a/cpp/ql/test/library-tests/builtins/type_traits/ms.cpp +++ b/cpp/ql/test/library-tests/builtins/type_traits/ms.cpp @@ -270,4 +270,21 @@ void f(void) { bool b_is_pointer_interconvertible_base_of1 = __is_pointer_interconvertible_base_of(empty, empty); bool b_is_pointer_interconvertible_base_of2 = __is_pointer_interconvertible_base_of(empty, abstract); + + bool b_is_trivially_copy_assignable1 = __is_trivially_copy_assignable(has_assign); + bool b_is_trivially_copy_assignable2 = __is_trivially_copy_assignable(int); + + bool b_is_assignable_no_precondition_check1 = __is_assignable_no_precondition_check(a_struct, a_struct); + bool b_is_assignable_no_precondition_check2 = __is_assignable_no_precondition_check(a_struct, empty); + bool b_is_assignable_no_precondition_check3 = __is_assignable_no_precondition_check(a_struct, int); + + bool b_is_pointer_interconvertible_with_class1 = __is_pointer_interconvertible_with_class(a_struct, &a_struct::i); + bool b_is_pointer_interconvertible_with_class2 = __is_pointer_interconvertible_with_class(a_struct, &a_struct::d); + + bool b_is_corresponding_member1 = __is_corresponding_member(a_struct, a_struct, &a_struct::i, &a_struct::i); + bool b_is_corresponding_member2 = __is_corresponding_member(a_struct, a_struct, &a_struct::i, &a_struct::d); + + bool b_is_valid_winrt_type = __is_valid_winrt_type(int); + bool b_is_win_class = __is_win_class(int); + bool b_is_win_interface = __is_win_interface(int); } diff --git a/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.cpp b/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.cpp new file mode 100644 index 000000000000..367650dab469 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.cpp @@ -0,0 +1,29 @@ +namespace std +{ + struct ptrdiff_t; + struct input_iterator_tag + { + }; + struct forward_iterator_tag : public input_iterator_tag + { + }; +} + +struct A +{ + using value_type = int; + using difference_type = std::ptrdiff_t; + using pointer = int*; + using reference = int&; + using iterator_category = std::forward_iterator_tag; +}; + +A get(); + +void test() +{ + while (true) + { + auto &&x = get(); + } +} diff --git a/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.expected b/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.expected new file mode 100644 index 000000000000..e217064d1dfc --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.expected @@ -0,0 +1,4 @@ +edges +nodes +subpaths +#select diff --git a/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.ql b/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.ql new file mode 100644 index 000000000000..f2f9744f7d9e --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/calls-as-ssa-variables/test.ql @@ -0,0 +1,23 @@ +/** + * @kind path-problem + */ + +import semmle.code.cpp.ir.IR +import semmle.code.cpp.dataflow.new.DataFlow +import Flow::PathGraph + +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source.asInstruction().(VariableAddressInstruction).getIRVariable() instanceof IRTempVariable + } + + predicate isSink(DataFlow::Node sink) { + sink.asInstruction().(CallInstruction).getStaticCallTarget().hasName("get") + } +} + +module Flow = DataFlow::Global; + +from Flow::PathNode source, Flow::PathNode sink +where Flow::flowPath(source, sink) +select sink.getNode(), source, sink, "" diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected index 8ec8033d086e..4343816afaa8 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected +++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected @@ -1,2 +1,46 @@ testFailures failures +edges +| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | provenance | MaD:10 | +| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:2 | +| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:93:29:93:39 | *recv_buffer | provenance | Src:MaD:2 Sink:MaD:6 | +| asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:98:7:98:14 | send_str | provenance | TaintFunction | +| asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:100:64:100:71 | *send_str | provenance | TaintFunction | +| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | | +| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:101:7:101:17 | send_buffer | provenance | | +| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | *send_buffer | provenance | Sink:MaD:6 | +| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | provenance | | +| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:10 | +| test.cpp:4:5:4:11 | [summary param] 0 in ymlStep | test.cpp:4:5:4:11 | [summary] to write: ReturnValue in ymlStep | provenance | MaD:2 | +| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:7:10:7:18 | call to ymlSource | provenance | Src:MaD:0 | +| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:11:10:11:10 | x | provenance | Sink:MaD:1 | +| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:13:18:13:18 | x | provenance | | +| test.cpp:13:10:13:16 | call to ymlStep | test.cpp:13:10:13:16 | call to ymlStep | provenance | | +| test.cpp:13:10:13:16 | call to ymlStep | test.cpp:15:10:15:10 | y | provenance | Sink:MaD:1 | +| test.cpp:13:18:13:18 | x | test.cpp:4:5:4:11 | [summary param] 0 in ymlStep | provenance | | +| test.cpp:13:18:13:18 | x | test.cpp:13:10:13:16 | call to ymlStep | provenance | MaD:2 | +nodes +| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | semmle.label | [summary param] *0 in buffer | +| asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | semmle.label | [summary] to write: ReturnValue in buffer | +| asio_streams.cpp:87:34:87:44 | read_until output argument | semmle.label | read_until output argument | +| asio_streams.cpp:91:7:91:17 | recv_buffer | semmle.label | recv_buffer | +| asio_streams.cpp:93:29:93:39 | *recv_buffer | semmle.label | *recv_buffer | +| asio_streams.cpp:97:37:97:44 | call to source | semmle.label | call to source | +| asio_streams.cpp:98:7:98:14 | send_str | semmle.label | send_str | +| asio_streams.cpp:100:44:100:62 | call to buffer | semmle.label | call to buffer | +| asio_streams.cpp:100:44:100:62 | call to buffer | semmle.label | call to buffer | +| asio_streams.cpp:100:64:100:71 | *send_str | semmle.label | *send_str | +| asio_streams.cpp:101:7:101:17 | send_buffer | semmle.label | send_buffer | +| asio_streams.cpp:103:29:103:39 | *send_buffer | semmle.label | *send_buffer | +| test.cpp:4:5:4:11 | [summary param] 0 in ymlStep | semmle.label | [summary param] 0 in ymlStep | +| test.cpp:4:5:4:11 | [summary] to write: ReturnValue in ymlStep | semmle.label | [summary] to write: ReturnValue in ymlStep | +| test.cpp:7:10:7:18 | call to ymlSource | semmle.label | call to ymlSource | +| test.cpp:7:10:7:18 | call to ymlSource | semmle.label | call to ymlSource | +| test.cpp:11:10:11:10 | x | semmle.label | x | +| test.cpp:13:10:13:16 | call to ymlStep | semmle.label | call to ymlStep | +| test.cpp:13:10:13:16 | call to ymlStep | semmle.label | call to ymlStep | +| test.cpp:13:18:13:18 | x | semmle.label | x | +| test.cpp:15:10:15:10 | y | semmle.label | y | +subpaths +| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | asio_streams.cpp:100:44:100:62 | call to buffer | +| test.cpp:13:18:13:18 | x | test.cpp:4:5:4:11 | [summary param] 0 in ymlStep | test.cpp:4:5:4:11 | [summary] to write: ReturnValue in ymlStep | test.cpp:13:10:13:16 | call to ymlStep | diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.ql b/cpp/ql/test/library-tests/dataflow/external-models/flow.ql index d6c2a70c4d9f..8ca0df3fa561 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/flow.ql +++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.ql @@ -1,6 +1,7 @@ import TestUtilities.dataflow.FlowTestCommon import cpp import semmle.code.cpp.security.FlowSources +import IRTest::IRFlow::PathGraph module IRTest { private import semmle.code.cpp.ir.IR diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected index 06941d388e27..1e8087c7ec96 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -301,27 +301,6 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | | file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | | file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | file://:0:0:0:0 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:75:8:75:8 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:75:8:75:8 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | -| file://:0:0:0:0 | (unnamed parameter 0) | stl.h:389:9:389:9 | (unnamed parameter 0) | | | file://:0:0:0:0 | (unnamed parameter 0) | structlikeclass.cpp:5:7:5:7 | (unnamed parameter 0) | | | file://:0:0:0:0 | (unnamed parameter 0) | structlikeclass.cpp:5:7:5:7 | (unnamed parameter 0) | | | file://:0:0:0:0 | (unnamed parameter 0) | taint.cpp:228:11:228:11 | (unnamed parameter 0) | | @@ -3599,12 +3578,6 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | standalone_iterators.cpp:128:2:128:3 | it | standalone_iterators.cpp:128:5:128:5 | call to operator+= | TAINT | | standalone_iterators.cpp:128:2:128:3 | ref arg it | standalone_iterators.cpp:129:7:129:8 | it | | | standalone_iterators.cpp:128:8:128:13 | call to source | standalone_iterators.cpp:128:2:128:3 | ref arg it | TAINT | -| stl.h:75:8:75:8 | container | stl.h:75:8:75:8 | constructor init of field container | TAINT | -| stl.h:75:8:75:8 | container | stl.h:75:8:75:8 | constructor init of field container | TAINT | -| stl.h:75:8:75:8 | container | stl.h:75:8:75:8 | container | | -| stl.h:75:8:75:8 | container | stl.h:75:8:75:8 | container | | -| stl.h:75:8:75:8 | this | stl.h:75:8:75:8 | constructor init of field container [pre-this] | | -| stl.h:75:8:75:8 | this | stl.h:75:8:75:8 | constructor init of field container [pre-this] | | | stl.h:95:69:95:69 | x | stl.h:95:69:95:69 | x | | | stl.h:95:69:95:69 | x | stl.h:95:69:95:69 | x | | | stl.h:95:69:95:69 | x | stl.h:95:69:95:69 | x | | @@ -3620,41 +3593,6 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | stl.h:292:30:292:40 | call to allocator | stl.h:292:21:292:41 | noexcept(...) | TAINT | | stl.h:292:30:292:40 | call to allocator | stl.h:292:21:292:41 | noexcept(...) | TAINT | | stl.h:292:53:292:63 | 0 | stl.h:292:46:292:64 | (no string representation) | TAINT | -| stl.h:389:9:389:9 | constructor init of field first [post-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [post-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [post-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [post-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [post-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [pre-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [pre-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [pre-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [pre-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | constructor init of field first [pre-this] | stl.h:389:9:389:9 | constructor init of field second [pre-this] | | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | constructor init of field first | TAINT | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | constructor init of field first | TAINT | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | constructor init of field first | TAINT | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | constructor init of field first | TAINT | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | constructor init of field first | TAINT | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | first | | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | first | | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | first | | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | first | | -| stl.h:389:9:389:9 | first | stl.h:389:9:389:9 | first | | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | constructor init of field second | TAINT | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | constructor init of field second | TAINT | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | constructor init of field second | TAINT | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | constructor init of field second | TAINT | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | constructor init of field second | TAINT | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | second | | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | second | | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | second | | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | second | | -| stl.h:389:9:389:9 | second | stl.h:389:9:389:9 | second | | -| stl.h:389:9:389:9 | this | stl.h:389:9:389:9 | constructor init of field first [pre-this] | | -| stl.h:389:9:389:9 | this | stl.h:389:9:389:9 | constructor init of field first [pre-this] | | -| stl.h:389:9:389:9 | this | stl.h:389:9:389:9 | constructor init of field first [pre-this] | | -| stl.h:389:9:389:9 | this | stl.h:389:9:389:9 | constructor init of field first [pre-this] | | -| stl.h:389:9:389:9 | this | stl.h:389:9:389:9 | constructor init of field first [pre-this] | | | stl.h:396:3:396:3 | this | stl.h:396:36:396:43 | constructor init of field first [pre-this] | | | stl.h:396:3:396:3 | this | stl.h:396:36:396:43 | constructor init of field first [pre-this] | | | stl.h:396:3:396:3 | this | stl.h:396:36:396:43 | constructor init of field first [pre-this] | | @@ -4361,6 +4299,8 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | string.cpp:446:17:446:17 | a | string.cpp:446:19:446:23 | call to begin | TAINT | | string.cpp:446:17:446:17 | ref arg a | string.cpp:446:8:446:8 | a | | | string.cpp:446:17:446:17 | ref arg a | string.cpp:447:8:447:8 | a | | +| string.cpp:446:17:446:25 | call to iterator | string.cpp:446:8:446:8 | ref arg a | TAINT | +| string.cpp:446:17:446:25 | call to iterator | string.cpp:446:10:446:15 | call to insert | TAINT | | string.cpp:446:19:446:23 | call to begin | string.cpp:446:17:446:25 | call to iterator | TAINT | | string.cpp:446:32:446:34 | 120 | string.cpp:446:8:446:8 | ref arg a | TAINT | | string.cpp:446:32:446:34 | 120 | string.cpp:446:10:446:15 | call to insert | TAINT | @@ -4369,6 +4309,8 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | string.cpp:449:17:449:17 | b | string.cpp:449:19:449:23 | call to begin | TAINT | | string.cpp:449:17:449:17 | ref arg b | string.cpp:449:8:449:8 | b | | | string.cpp:449:17:449:17 | ref arg b | string.cpp:450:8:450:8 | b | | +| string.cpp:449:17:449:25 | call to iterator | string.cpp:449:8:449:8 | ref arg b | TAINT | +| string.cpp:449:17:449:25 | call to iterator | string.cpp:449:10:449:15 | call to insert | TAINT | | string.cpp:449:19:449:23 | call to begin | string.cpp:449:17:449:25 | call to iterator | TAINT | | string.cpp:449:32:449:46 | call to source | string.cpp:449:8:449:8 | ref arg b | TAINT | | string.cpp:449:32:449:46 | call to source | string.cpp:449:10:449:15 | call to insert | TAINT | @@ -4396,6 +4338,8 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | string.cpp:459:17:459:17 | c | string.cpp:459:19:459:21 | call to end | TAINT | | string.cpp:459:17:459:17 | ref arg c | string.cpp:459:8:459:8 | c | | | string.cpp:459:17:459:17 | ref arg c | string.cpp:460:8:460:8 | c | | +| string.cpp:459:17:459:23 | call to iterator | string.cpp:459:8:459:8 | ref arg c | TAINT | +| string.cpp:459:17:459:23 | call to iterator | string.cpp:459:10:459:15 | call to insert | TAINT | | string.cpp:459:19:459:21 | call to end | string.cpp:459:17:459:23 | call to iterator | TAINT | | string.cpp:459:26:459:27 | ref arg s1 | string.cpp:459:38:459:39 | s1 | | | string.cpp:459:26:459:27 | ref arg s1 | string.cpp:465:28:465:29 | s1 | | @@ -4413,6 +4357,8 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | string.cpp:462:17:462:17 | d | string.cpp:462:19:462:21 | call to end | TAINT | | string.cpp:462:17:462:17 | ref arg d | string.cpp:462:8:462:8 | d | | | string.cpp:462:17:462:17 | ref arg d | string.cpp:463:8:463:8 | d | | +| string.cpp:462:17:462:23 | call to iterator | string.cpp:462:8:462:8 | ref arg d | TAINT | +| string.cpp:462:17:462:23 | call to iterator | string.cpp:462:10:462:15 | call to insert | TAINT | | string.cpp:462:19:462:21 | call to end | string.cpp:462:17:462:23 | call to iterator | TAINT | | string.cpp:462:26:462:27 | ref arg s2 | string.cpp:462:38:462:39 | s2 | | | string.cpp:462:26:462:27 | ref arg s2 | string.cpp:465:8:465:9 | s2 | | @@ -4432,6 +4378,8 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | string.cpp:465:18:465:19 | ref arg s2 | string.cpp:465:8:465:9 | s2 | | | string.cpp:465:18:465:19 | ref arg s2 | string.cpp:466:8:466:9 | s2 | | | string.cpp:465:18:465:19 | s2 | string.cpp:465:21:465:23 | call to end | TAINT | +| string.cpp:465:18:465:25 | call to iterator | string.cpp:465:8:465:9 | ref arg s2 | TAINT | +| string.cpp:465:18:465:25 | call to iterator | string.cpp:465:11:465:16 | call to insert | TAINT | | string.cpp:465:21:465:23 | call to end | string.cpp:465:18:465:25 | call to iterator | TAINT | | string.cpp:465:28:465:29 | ref arg s1 | string.cpp:465:40:465:41 | s1 | | | string.cpp:465:28:465:29 | s1 | string.cpp:465:31:465:35 | call to begin | TAINT | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected index e00434dd75fb..976b83beaa8a 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected @@ -377,7 +377,6 @@ getParameterTypeName | stl.h:88:25:88:33 | operator= | 0 | value_type && | | stl.h:91:24:91:33 | operator++ | 0 | int | | stl.h:91:24:91:33 | operator++ | 0 | int | -| stl.h:139:8:139:8 | basic_string | 0 | basic_string & | | stl.h:148:3:148:14 | basic_string | 0 | const class:2 & | | stl.h:149:33:149:44 | basic_string | 0 | const class:0 * | | stl.h:149:33:149:44 | basic_string | 1 | const class:2 & | diff --git a/cpp/ql/test/library-tests/declaration/IsMember.expected b/cpp/ql/test/library-tests/declaration/IsMember.expected index 80fcd74689ce..69c6d20e9629 100644 --- a/cpp/ql/test/library-tests/declaration/IsMember.expected +++ b/cpp/ql/test/library-tests/declaration/IsMember.expected @@ -17,10 +17,6 @@ | declaration.cpp:51:7:51:7 | operator= | | declaration.cpp:52:7:52:14 | myField0 | | declaration.cpp:53:9:53:17 | myPointer | -| declaration.cpp:62:7:62:7 | operator= | -| declaration.cpp:62:7:62:7 | operator= | -| declaration.cpp:62:7:62:7 | operator= | -| declaration.cpp:62:7:62:7 | operator= | | declaration.cpp:65:5:65:20 | myMemberVariable | | declaration.cpp:65:5:65:20 | myMemberVariable | | declaration.cpp:65:5:65:20 | myMemberVariable | @@ -36,10 +32,6 @@ | declaration.cpp:105:9:105:21 | myNestedField | | declaration.cpp:108:3:108:10 | MyClass1 | | declaration.cpp:110:7:110:17 | getMyField1 | -| declaration.cpp:119:7:119:7 | operator= | -| declaration.cpp:119:7:119:7 | operator= | -| declaration.cpp:119:7:119:7 | operator= | -| declaration.cpp:119:7:119:7 | operator= | | declaration.cpp:122:5:122:20 | myMemberVariable | | declaration.cpp:122:5:122:20 | myMemberVariable | | declaration.cpp:122:5:122:20 | myMemberVariable | diff --git a/cpp/ql/test/library-tests/declarationEntry/declarationEntry/declarationEntry.expected b/cpp/ql/test/library-tests/declarationEntry/declarationEntry/declarationEntry.expected index 19c55430e1cc..ab6134ac4d00 100644 --- a/cpp/ql/test/library-tests/declarationEntry/declarationEntry/declarationEntry.expected +++ b/cpp/ql/test/library-tests/declarationEntry/declarationEntry/declarationEntry.expected @@ -15,10 +15,6 @@ | declarationEntry.cpp:20:6:20:11 | myEnum | declarationEntry.cpp:18:6:18:11 | declaration of myEnum | 1 | 1 | | declarationEntry.cpp:20:6:20:11 | myEnum | declarationEntry.cpp:20:6:20:11 | definition of myEnum | 1 | 1 | | declarationEntry.cpp:27:20:27:20 | T | declarationEntry.cpp:27:20:27:20 | definition of T | 1 | 1 | -| declarationEntry.cpp:28:7:28:7 | operator= | declarationEntry.cpp:28:7:28:7 | declaration of operator= | 1 | 1 | -| declarationEntry.cpp:28:7:28:7 | operator= | declarationEntry.cpp:28:7:28:7 | declaration of operator= | 1 | 1 | -| declarationEntry.cpp:28:7:28:7 | operator= | declarationEntry.cpp:28:7:28:7 | declaration of operator= | 1 | 1 | -| declarationEntry.cpp:28:7:28:7 | operator= | declarationEntry.cpp:28:7:28:7 | declaration of operator= | 1 | 1 | | declarationEntry.cpp:28:7:28:21 | myTemplateClass | declarationEntry.cpp:28:7:28:21 | definition of myTemplateClass | 1 | 1 | | declarationEntry.cpp:28:7:28:21 | myTemplateClass | declarationEntry.cpp:28:7:28:21 | definition of myTemplateClass | 1 | 0 | | declarationEntry.cpp:28:7:28:21 | myTemplateClass | declarationEntry.cpp:28:7:28:21 | definition of myTemplateClass | 1 | 0 | diff --git a/cpp/ql/test/library-tests/declarationEntry/declarationEntry/fde.expected b/cpp/ql/test/library-tests/declarationEntry/declarationEntry/fde.expected index 71c81c7ac826..88050e8c71d0 100644 --- a/cpp/ql/test/library-tests/declarationEntry/declarationEntry/fde.expected +++ b/cpp/ql/test/library-tests/declarationEntry/declarationEntry/fde.expected @@ -6,10 +6,6 @@ | declarationEntry.c:17:6:17:21 | declaration of myFourthFunction | | 1 | c_linkage | | declarationEntry.cpp:9:6:9:15 | declaration of myFunction | | 0 | | | declarationEntry.cpp:11:6:11:15 | definition of myFunction | | 0 | | -| declarationEntry.cpp:28:7:28:7 | declaration of operator= | | 0 | | -| declarationEntry.cpp:28:7:28:7 | declaration of operator= | | 0 | | -| declarationEntry.cpp:28:7:28:7 | declaration of operator= | | 0 | | -| declarationEntry.cpp:28:7:28:7 | declaration of operator= | | 0 | | | declarationEntry.cpp:39:7:39:7 | declaration of operator= | | 0 | | | declarationEntry.cpp:39:7:39:7 | declaration of operator= | | 0 | | | macro.c:2:1:2:3 | declaration of foo | | 2 | c_linkage, static | diff --git a/cpp/ql/test/library-tests/declarationEntry/declarationEntry/roundTrip.expected b/cpp/ql/test/library-tests/declarationEntry/declarationEntry/roundTrip.expected index e0ea52ab0270..2f9ea170973e 100644 --- a/cpp/ql/test/library-tests/declarationEntry/declarationEntry/roundTrip.expected +++ b/cpp/ql/test/library-tests/declarationEntry/declarationEntry/roundTrip.expected @@ -15,10 +15,6 @@ | declarationEntry.cpp:18:6:18:11 | declaration of myEnum | declarationEntry.cpp:20:6:20:11 | myEnum | yes | | declarationEntry.cpp:20:6:20:11 | definition of myEnum | declarationEntry.cpp:20:6:20:11 | myEnum | yes | | declarationEntry.cpp:27:20:27:20 | definition of T | declarationEntry.cpp:27:20:27:20 | T | yes | -| declarationEntry.cpp:28:7:28:7 | declaration of operator= | declarationEntry.cpp:28:7:28:7 | operator= | yes | -| declarationEntry.cpp:28:7:28:7 | declaration of operator= | declarationEntry.cpp:28:7:28:7 | operator= | yes | -| declarationEntry.cpp:28:7:28:7 | declaration of operator= | declarationEntry.cpp:28:7:28:7 | operator= | yes | -| declarationEntry.cpp:28:7:28:7 | declaration of operator= | declarationEntry.cpp:28:7:28:7 | operator= | yes | | declarationEntry.cpp:28:7:28:21 | definition of myTemplateClass | declarationEntry.cpp:28:7:28:21 | myTemplateClass | yes | | declarationEntry.cpp:31:4:31:19 | definition of myMemberVariable | declarationEntry.cpp:31:4:31:19 | myMemberVariable | yes | | declarationEntry.cpp:31:4:31:19 | definition of myMemberVariable | declarationEntry.cpp:31:4:31:19 | myMemberVariable | yes | @@ -31,10 +27,6 @@ | declarationEntry.cpp:42:6:42:21 | definition of myMemberVariable | declarationEntry.cpp:42:6:42:21 | myMemberVariable | yes | | file://:0:0:0:0 | declaration of 1st parameter | file://:0:0:0:0 | (unnamed parameter 0) | yes | | file://:0:0:0:0 | declaration of 1st parameter | file://:0:0:0:0 | (unnamed parameter 0) | yes | -| file://:0:0:0:0 | declaration of 1st parameter | file://:0:0:0:0 | (unnamed parameter 0) | yes | -| file://:0:0:0:0 | declaration of 1st parameter | file://:0:0:0:0 | (unnamed parameter 0) | yes | -| file://:0:0:0:0 | declaration of 1st parameter | file://:0:0:0:0 | (unnamed parameter 0) | yes | -| file://:0:0:0:0 | declaration of 1st parameter | file://:0:0:0:0 | (unnamed parameter 0) | yes | | file://:0:0:0:0 | definition of fp_offset | file://:0:0:0:0 | fp_offset | yes | | file://:0:0:0:0 | definition of gp_offset | file://:0:0:0:0 | gp_offset | yes | | file://:0:0:0:0 | definition of overflow_arg_area | file://:0:0:0:0 | overflow_arg_area | yes | diff --git a/cpp/ql/test/library-tests/declarationEntry/more/declarationEntry.expected b/cpp/ql/test/library-tests/declarationEntry/more/declarationEntry.expected index 47b7f0559438..b4817f60ad14 100644 --- a/cpp/ql/test/library-tests/declarationEntry/more/declarationEntry.expected +++ b/cpp/ql/test/library-tests/declarationEntry/more/declarationEntry.expected @@ -2,10 +2,6 @@ | file://:0:0:0:0 | declaration of 1st parameter | | file://:0:0:0:0 | declaration of 1st parameter | | file://:0:0:0:0 | declaration of 1st parameter | -| file://:0:0:0:0 | declaration of 1st parameter | -| file://:0:0:0:0 | declaration of 1st parameter | -| file://:0:0:0:0 | declaration of 1st parameter | -| file://:0:0:0:0 | declaration of 1st parameter | | file://:0:0:0:0 | definition of fp_offset | | file://:0:0:0:0 | definition of gp_offset | | file://:0:0:0:0 | definition of overflow_arg_area | @@ -72,12 +68,6 @@ | test.cpp:64:19:64:19 | definition of T | | test.cpp:65:7:65:27 | declaration of tmplInstantiatedClass | | test.cpp:66:19:66:19 | definition of T | -| test.cpp:67:7:67:7 | declaration of operator= | -| test.cpp:67:7:67:7 | declaration of operator= | -| test.cpp:67:7:67:7 | declaration of operator= | -| test.cpp:67:7:67:7 | declaration of operator= | -| test.cpp:67:7:67:7 | definition of tmplInstantiatedClass | -| test.cpp:67:7:67:7 | definition of tmplInstantiatedClass | | test.cpp:67:7:67:27 | definition of tmplInstantiatedClass | | test.cpp:68:7:68:7 | definition of t | | test.cpp:68:7:68:7 | definition of t | diff --git a/cpp/ql/test/library-tests/depends_initializers/VariableInitializers.expected b/cpp/ql/test/library-tests/depends_initializers/VariableInitializers.expected index dbe414484053..c4b5b52d062f 100644 --- a/cpp/ql/test/library-tests/depends_initializers/VariableInitializers.expected +++ b/cpp/ql/test/library-tests/depends_initializers/VariableInitializers.expected @@ -6,8 +6,6 @@ | file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 | | file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 | | file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 | -| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 | -| file://:0:0:0:0 | (unnamed parameter 0) | 0 | 0 | | file://:0:0:0:0 | fp_offset | 0 | 0 | | file://:0:0:0:0 | gp_offset | 0 | 0 | | file://:0:0:0:0 | overflow_arg_area | 0 | 0 | diff --git a/cpp/ql/test/library-tests/functions/functions/Functions1.expected b/cpp/ql/test/library-tests/functions/functions/Functions1.expected index 94756685634c..eeda8cfc8225 100644 --- a/cpp/ql/test/library-tests/functions/functions/Functions1.expected +++ b/cpp/ql/test/library-tests/functions/functions/Functions1.expected @@ -1,11 +1,6 @@ -| ODASA-5186.cpp:4:8:4:8 | MyClass | MyClass | | declaration:ODASA-5186.cpp:4:8:4:8, definition:ODASA-5186.cpp:4:8:4:8 | -| ODASA-5186.cpp:4:8:4:8 | operator= | operator= | MyClass && (unnamed parameter 0) | declaration:ODASA-5186.cpp:4:8:4:8 | -| ODASA-5186.cpp:4:8:4:8 | operator= | operator= | const MyClass & (unnamed parameter 0) | declaration:ODASA-5186.cpp:4:8:4:8 | | ODASA-5186.cpp:5:8:5:8 | operator== | operator== | const MyClass & other | declaration:ODASA-5186.cpp:5:8:5:8, definition:ODASA-5186.cpp:5:8:5:8 | | ODASA-5186.cpp:5:8:5:17 | operator== | operator== | const MyClass & other | declaration:ODASA-5186.cpp:5:8:5:17, definition:ODASA-5186.cpp:5:8:5:17 | | ODASA-5186.cpp:8:6:8:9 | test | test | | TopLevelFunction, declaration:ODASA-5186.cpp:8:6:8:9, definition:ODASA-5186.cpp:8:6:8:9, isTopLevel | -| ODASA-5186.hpp:2:8:2:8 | operator= | operator= | NEQ_helper> && (unnamed parameter 0) | declaration:ODASA-5186.hpp:2:8:2:8 | -| ODASA-5186.hpp:2:8:2:8 | operator= | operator= | const NEQ_helper> & (unnamed parameter 0) | declaration:ODASA-5186.hpp:2:8:2:8 | | ODASA-5186.hpp:4:18:4:27 | operator!= | operator!= | const MyClass & x, const MyClass & y | TopLevelFunction, declaration:ODASA-5186.hpp:4:18:4:27, definition:ODASA-5186.hpp:4:18:4:27, isTopLevel | | ODASA-5186.hpp:4:18:4:27 | operator!= | operator!= | const T & x, const T & y | TopLevelFunction, declaration:ODASA-5186.hpp:4:18:4:27, definition:ODASA-5186.hpp:4:18:4:27, isTopLevel | | functions.cpp:1:6:1:6 | f | f | int a, int b | TopLevelFunction, declaration:functions.cpp:1:6:1:6, definition:functions.cpp:1:6:1:6, isTopLevel | diff --git a/cpp/ql/test/library-tests/functions/functions/Functions2.expected b/cpp/ql/test/library-tests/functions/functions/Functions2.expected index 4040d024ebb5..956932385f76 100644 --- a/cpp/ql/test/library-tests/functions/functions/Functions2.expected +++ b/cpp/ql/test/library-tests/functions/functions/Functions2.expected @@ -1,10 +1,5 @@ | ODASA-5186.cpp:4:8:4:14 | MyClass | Class | ODASA-5186.cpp:5:8:5:17 | operator== | | -| ODASA-5186.cpp:4:8:4:14 | MyClass | Struct | ODASA-5186.cpp:4:8:4:8 | MyClass | Constructor, NoArgConstructor, getAConstructor() | -| ODASA-5186.cpp:4:8:4:14 | MyClass | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | | -| ODASA-5186.cpp:4:8:4:14 | MyClass | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | | | ODASA-5186.cpp:4:8:4:14 | MyClass | Struct | ODASA-5186.cpp:5:8:5:8 | operator== | | -| ODASA-5186.hpp:2:8:2:17 | NEQ_helper> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | | -| ODASA-5186.hpp:2:8:2:17 | NEQ_helper> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | | | file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | | | file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | | | functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | | diff --git a/cpp/ql/test/library-tests/identifiers/qualified_names/qualifiedNames.expected b/cpp/ql/test/library-tests/identifiers/qualified_names/qualifiedNames.expected index c98c493af257..f959304832ac 100644 --- a/cpp/ql/test/library-tests/identifiers/qualified_names/qualifiedNames.expected +++ b/cpp/ql/test/library-tests/identifiers/qualified_names/qualifiedNames.expected @@ -39,8 +39,6 @@ | qualifiedNames.cpp:39:3:39:19 | typedefStructName | typedefStructName | | | typedefStructName | typedefStructName | | qualifiedNames.cpp:39:23:39:40 | ptypedefStructName | ptypedefStructName | | | ptypedefStructName | ptypedefStructName | | qualifiedNames.cpp:41:11:41:18 | typedefC | typedefC | | | typedefC | typedefC | -| qualifiedNames.cpp:45:10:45:10 | operator= | templates::TemplateClass::operator= | templates | TemplateClass | operator= | (not global) | -| qualifiedNames.cpp:45:10:45:10 | operator= | templates::TemplateClass::operator= | templates | TemplateClass | operator= | (not global) | | qualifiedNames.cpp:45:10:45:22 | TemplateClass | templates::TemplateClass | templates | | TemplateClass | (not global) | | qualifiedNames.cpp:45:10:45:22 | TemplateClass | templates::TemplateClass | templates | | TemplateClass | (not global) | | qualifiedNames.cpp:45:10:45:22 | TemplateClass | templates::TemplateClass | templates | | TemplateClass | (not global) | diff --git a/cpp/ql/test/library-tests/instantiations/test.expected b/cpp/ql/test/library-tests/instantiations/test.expected index 7460a9fa9dcc..f4a3f63f143c 100644 --- a/cpp/ql/test/library-tests/instantiations/test.expected +++ b/cpp/ql/test/library-tests/instantiations/test.expected @@ -25,10 +25,6 @@ | test.cpp:16:7:16:7 | operator= | | test.cpp:16:32:16:35 | vfun | | test.cpp:19:7:19:7 | C | -| test.cpp:19:7:19:7 | C | -| test.cpp:19:7:19:7 | C | -| test.cpp:19:7:19:7 | operator= | -| test.cpp:19:7:19:7 | operator= | | test.cpp:21:18:21:18 | vfun | | test.cpp:21:18:21:21 | vfun | | test.cpp:27:6:27:6 | f | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 94f8d8bff3c9..cba8a74758a2 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -1729,30 +1729,6 @@ complex.c: # 144| ValueCategory = prvalue # 145| getStmt(72): [ReturnStmt] return ... coroutines.cpp: -# 4| [CopyAssignmentOperator] std::coroutine_traits& std::coroutine_traits::operator=(std::coroutine_traits const&) -# 4| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const coroutine_traits & -# 4| [MoveAssignmentOperator] std::coroutine_traits& std::coroutine_traits::operator=(std::coroutine_traits&&) -# 4| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] coroutine_traits && -# 4| [CopyAssignmentOperator] std::coroutine_traits& std::coroutine_traits::operator=(std::coroutine_traits const&) -# 4| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const coroutine_traits & -# 4| [MoveAssignmentOperator] std::coroutine_traits& std::coroutine_traits::operator=(std::coroutine_traits&&) -# 4| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] coroutine_traits && -# 4| [CopyAssignmentOperator] std::coroutine_traits& std::coroutine_traits::operator=(std::coroutine_traits const&) -# 4| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const coroutine_traits & -# 4| [MoveAssignmentOperator] std::coroutine_traits& std::coroutine_traits::operator=(std::coroutine_traits&&) -# 4| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] coroutine_traits && # 12| [Constructor] void std::coroutine_handle::coroutine_handle() # 12| : # 13| [Constructor] void std::coroutine_handle::coroutine_handle(std::nullptr_t) @@ -8629,14 +8605,6 @@ ir.cpp: # 709| getArgument(1): [VariableAccess] y # 709| Type = [IntType] int # 709| ValueCategory = prvalue(load) -# 713| [CopyAssignmentOperator] Outer& Outer::operator=(Outer const&) -# 713| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Outer & -# 713| [MoveAssignmentOperator] Outer& Outer::operator=(Outer&&) -# 713| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] Outer && # 715| [MemberFunction,TemplateFunction] T Outer::Func(U, V) # 715| : # 715| getParameter(0): [Parameter] x @@ -11941,22 +11909,6 @@ ir.cpp: # 1054| getRightOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1054| Type = [IntType] int # 1054| ValueCategory = prvalue(load) -# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) -# 1078| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) -# 1078| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) -# 1078| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) -# 1078| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & # 1081| [Constructor] void std::iterator::iterator() # 1081| : # 1082| [Constructor] void std::iterator::iterator(std::iterator const&) @@ -12105,38 +12057,6 @@ ir.cpp: # 1105| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] output_iterator_tag && -# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) -# 1108| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const vector & -# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) -# 1108| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const vector & -# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) -# 1108| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const vector & -# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) -# 1108| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const vector & -# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) -# 1108| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const vector & -# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) -# 1108| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const vector & -# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) -# 1108| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const vector & -# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) -# 1108| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const vector & # 1109| [Constructor] void std::vector::vector(ClassWithDestructor) # 1109| : # 1109| getParameter(0): [Parameter] (unnamed parameter 0) @@ -17431,14 +17351,6 @@ ir.cpp: # 1904| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] S && -# 1908| [CopyAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1 const&) -# 1908| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Bar1 & -# 1908| [MoveAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1&&) -# 1908| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] Bar1 && # 1911| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) # 1911| : # 1911| getParameter(0): [Parameter] p @@ -17494,14 +17406,6 @@ ir.cpp: # 1919| Value = [CStyleCast] 0 # 1919| ValueCategory = prvalue # 1920| getStmt(2): [ReturnStmt] return ... -# 1922| [CopyAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2 const&) -# 1922| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Bar2 & -# 1922| [MoveAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2&&) -# 1922| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] Bar2 && # 1924| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() # 1924| : # 1924| getEntryPoint(): [BlockStmt] { ... } @@ -17644,14 +17548,6 @@ ir.cpp: # 1934| Type = [ClassTemplateInstantiation,Struct] Bar2 # 1934| ValueCategory = lvalue # 1935| getStmt(2): [ReturnStmt] return ... -# 1937| [CopyAssignmentOperator] missing_declaration_entries::Bar3& missing_declaration_entries::Bar3::operator=(missing_declaration_entries::Bar3 const&) -# 1937| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Bar3 & -# 1937| [MoveAssignmentOperator] missing_declaration_entries::Bar3& missing_declaration_entries::Bar3::operator=(missing_declaration_entries::Bar3&&) -# 1937| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] Bar3 && # 1939| [MemberFunction] int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() # 1939| : # 1939| getEntryPoint(): [BlockStmt] { ... } @@ -22753,6 +22649,616 @@ ir.cpp: # 2556| Type = [LongType] unsigned long # 2556| ValueCategory = prvalue(load) # 2557| getStmt(1): [ReturnStmt] return ... +# 2559| [TopLevelFunction] void p_points_to_x_or_y(int, int) +# 2559| : +# 2559| getParameter(0): [Parameter] a +# 2559| Type = [IntType] int +# 2559| getParameter(1): [Parameter] b +# 2559| Type = [IntType] int +# 2559| getEntryPoint(): [BlockStmt] { ... } +# 2560| getStmt(0): [DeclStmt] declaration +# 2560| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2560| Type = [IntType] int +# 2561| getStmt(1): [DeclStmt] declaration +# 2561| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2561| Type = [IntType] int +# 2562| getStmt(2): [DeclStmt] declaration +# 2562| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p +# 2562| Type = [IntPointerType] int * +# 2563| getStmt(3): [IfStmt] if (...) ... +# 2563| getCondition(): [LTExpr] ... < ... +# 2563| Type = [BoolType] bool +# 2563| ValueCategory = prvalue +# 2563| getLesserOperand(): [VariableAccess] a +# 2563| Type = [IntType] int +# 2563| ValueCategory = prvalue(load) +# 2563| getGreaterOperand(): [VariableAccess] b +# 2563| Type = [IntType] int +# 2563| ValueCategory = prvalue(load) +# 2563| getThen(): [BlockStmt] { ... } +# 2564| getStmt(0): [ExprStmt] ExprStmt +# 2564| getExpr(): [AssignExpr] ... = ... +# 2564| Type = [IntPointerType] int * +# 2564| ValueCategory = lvalue +# 2564| getLValue(): [VariableAccess] p +# 2564| Type = [IntPointerType] int * +# 2564| ValueCategory = lvalue +# 2564| getRValue(): [AddressOfExpr] & ... +# 2564| Type = [IntPointerType] int * +# 2564| ValueCategory = prvalue +# 2564| getOperand(): [VariableAccess] x +# 2564| Type = [IntType] int +# 2564| ValueCategory = lvalue +# 2565| getElse(): [BlockStmt] { ... } +# 2566| getStmt(0): [ExprStmt] ExprStmt +# 2566| getExpr(): [AssignExpr] ... = ... +# 2566| Type = [IntPointerType] int * +# 2566| ValueCategory = lvalue +# 2566| getLValue(): [VariableAccess] p +# 2566| Type = [IntPointerType] int * +# 2566| ValueCategory = lvalue +# 2566| getRValue(): [AddressOfExpr] & ... +# 2566| Type = [IntPointerType] int * +# 2566| ValueCategory = prvalue +# 2566| getOperand(): [VariableAccess] y +# 2566| Type = [IntType] int +# 2566| ValueCategory = lvalue +# 2568| getStmt(4): [ExprStmt] ExprStmt +# 2568| getExpr(): [AssignExpr] ... = ... +# 2568| Type = [IntType] int +# 2568| ValueCategory = lvalue +# 2568| getLValue(): [PointerDereferenceExpr] * ... +# 2568| Type = [IntType] int +# 2568| ValueCategory = lvalue +# 2568| getOperand(): [VariableAccess] p +# 2568| Type = [IntPointerType] int * +# 2568| ValueCategory = prvalue(load) +# 2568| getRValue(): [Literal] 5 +# 2568| Type = [IntType] int +# 2568| Value = [Literal] 5 +# 2568| ValueCategory = prvalue +# 2569| getStmt(5): [DeclStmt] declaration +# 2569| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2569| Type = [IntType] int +# 2569| getVariable().getInitializer(): [Initializer] initializer for z +# 2569| getExpr(): [VariableAccess] x +# 2569| Type = [IntType] int +# 2569| ValueCategory = prvalue(load) +# 2570| getStmt(6): [DeclStmt] declaration +# 2570| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 2570| Type = [IntType] int +# 2570| getVariable().getInitializer(): [Initializer] initializer for w +# 2570| getExpr(): [VariableAccess] y +# 2570| Type = [IntType] int +# 2570| ValueCategory = prvalue(load) +# 2571| getStmt(7): [ReturnStmt] return ... +# 2573| [TopLevelFunction] int phi_after_while() +# 2573| : +# 2573| getEntryPoint(): [BlockStmt] { ... } +# 2574| getStmt(0): [DeclStmt] declaration +# 2574| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 2574| Type = [IntType] int +# 2575| getStmt(1): [DeclStmt] declaration +# 2575| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rP +# 2575| Type = [IntPointerType] int * +# 2575| getVariable().getInitializer(): [Initializer] initializer for rP +# 2575| getExpr(): [AddressOfExpr] & ... +# 2575| Type = [IntPointerType] int * +# 2575| ValueCategory = prvalue +# 2575| getOperand(): [VariableAccess] r +# 2575| Type = [IntType] int +# 2575| ValueCategory = lvalue +# 2577| getStmt(2): [WhileStmt] while (...) ... +# 2577| getCondition(): [FunctionCall] call to predicateA +# 2577| Type = [BoolType] bool +# 2577| ValueCategory = prvalue +# 2577| getStmt(): [BlockStmt] { ... } +# 2578| getStmt(0): [DeclStmt] declaration +# 2578| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2578| Type = [IntType] int +# 2578| getVariable().getInitializer(): [Initializer] initializer for s +# 2578| getExpr(): [Literal] 0 +# 2578| Type = [IntType] int +# 2578| Value = [Literal] 0 +# 2578| ValueCategory = prvalue +# 2579| getStmt(1): [ExprStmt] ExprStmt +# 2579| getExpr(): [AssignExpr] ... = ... +# 2579| Type = [IntType] int +# 2579| ValueCategory = lvalue +# 2579| getLValue(): [PointerDereferenceExpr] * ... +# 2579| Type = [IntType] int +# 2579| ValueCategory = lvalue +# 2579| getOperand(): [VariableAccess] rP +# 2579| Type = [IntPointerType] int * +# 2579| ValueCategory = prvalue(load) +# 2579| getRValue(): [VariableAccess] s +# 2579| Type = [IntType] int +# 2579| ValueCategory = prvalue(load) +# 2580| getStmt(2): [ExprStmt] ExprStmt +# 2580| getExpr(): [AssignExpr] ... = ... +# 2580| Type = [IntPointerType] int * +# 2580| ValueCategory = lvalue +# 2580| getLValue(): [VariableAccess] rP +# 2580| Type = [IntPointerType] int * +# 2580| ValueCategory = lvalue +# 2580| getRValue(): [AddressOfExpr] & ... +# 2580| Type = [IntPointerType] int * +# 2580| ValueCategory = prvalue +# 2580| getOperand(): [VariableAccess] s +# 2580| Type = [IntType] int +# 2580| ValueCategory = lvalue +# 2583| getStmt(3): [ReturnStmt] return ... +# 2583| getExpr(): [VariableAccess] r +# 2583| Type = [IntType] int +# 2583| ValueCategory = prvalue(load) +# 2588| [TopLevelFunction] char* recursive_conditional_call_with_increment(char*, bool) +# 2588| : +# 2588| getParameter(0): [Parameter] d +# 2588| Type = [CharPointerType] char * +# 2588| getParameter(1): [Parameter] b +# 2588| Type = [BoolType] bool +# 2589| getEntryPoint(): [BlockStmt] { ... } +# 2590| getStmt(0): [IfStmt] if (...) ... +# 2590| getCondition(): [VariableAccess] b +# 2590| Type = [BoolType] bool +# 2590| ValueCategory = prvalue(load) +# 2590| getThen(): [BlockStmt] { ... } +# 2591| getStmt(0): [ExprStmt] ExprStmt +# 2591| getExpr(): [AssignExpr] ... = ... +# 2591| Type = [CharPointerType] char * +# 2591| ValueCategory = lvalue +# 2591| getLValue(): [VariableAccess] d +# 2591| Type = [CharPointerType] char * +# 2591| ValueCategory = lvalue +# 2591| getRValue(): [FunctionCall] call to recursive_conditional_call_with_increment +# 2591| Type = [CharPointerType] char * +# 2591| ValueCategory = prvalue +# 2591| getArgument(0): [VariableAccess] d +# 2591| Type = [CharPointerType] char * +# 2591| ValueCategory = prvalue(load) +# 2591| getArgument(1): [VariableAccess] b +# 2591| Type = [BoolType] bool +# 2591| ValueCategory = prvalue(load) +# 2593| getStmt(1): [ExprStmt] ExprStmt +# 2593| getExpr(): [PostfixIncrExpr] ... ++ +# 2593| Type = [CharPointerType] char * +# 2593| ValueCategory = prvalue +# 2593| getOperand(): [VariableAccess] d +# 2593| Type = [CharPointerType] char * +# 2593| ValueCategory = lvalue +# 2594| getStmt(2): [ReturnStmt] return ... +# 2594| getExpr(): [VariableAccess] d +# 2594| Type = [CharPointerType] char * +# 2594| ValueCategory = prvalue(load) +# 2597| [CopyAssignmentOperator] Recursive& Recursive::operator=(Recursive const&) +# 2597| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Recursive & +# 2597| [MoveAssignmentOperator] Recursive& Recursive::operator=(Recursive&&) +# 2597| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] Recursive && +# 2602| [TopLevelFunction] Recursive* merge(Recursive*) +# 2602| : +# 2602| getParameter(0): [Parameter] a +# 2602| Type = [PointerType] Recursive * +# 2603| getEntryPoint(): [BlockStmt] { ... } +# 2604| getStmt(0): [DeclStmt] declaration +# 2604| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2604| Type = [PointerType] Recursive * +# 2605| getStmt(1): [DeclStmt] declaration +# 2605| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p +# 2605| Type = [PointerType] Recursive ** +# 2605| getVariable().getInitializer(): [Initializer] initializer for p +# 2605| getExpr(): [AddressOfExpr] & ... +# 2605| Type = [PointerType] Recursive ** +# 2605| ValueCategory = prvalue +# 2605| getOperand(): [VariableAccess] b +# 2605| Type = [PointerType] Recursive * +# 2605| ValueCategory = lvalue +# 2607| getStmt(2): [WhileStmt] while (...) ... +# 2607| getCondition(): [FunctionCall] call to predicateA +# 2607| Type = [BoolType] bool +# 2607| ValueCategory = prvalue +# 2608| getStmt(): [BlockStmt] { ... } +# 2609| getStmt(0): [ExprStmt] ExprStmt +# 2609| getExpr(): [AssignExpr] ... = ... +# 2609| Type = [PointerType] Recursive * +# 2609| ValueCategory = lvalue +# 2609| getLValue(): [PointerDereferenceExpr] * ... +# 2609| Type = [PointerType] Recursive * +# 2609| ValueCategory = lvalue +# 2609| getOperand(): [VariableAccess] p +# 2609| Type = [PointerType] Recursive ** +# 2609| ValueCategory = prvalue(load) +# 2609| getRValue(): [VariableAccess] a +# 2609| Type = [PointerType] Recursive * +# 2609| ValueCategory = prvalue(load) +# 2610| getStmt(1): [ExprStmt] ExprStmt +# 2610| getExpr(): [AssignExpr] ... = ... +# 2610| Type = [PointerType] Recursive ** +# 2610| ValueCategory = lvalue +# 2610| getLValue(): [VariableAccess] p +# 2610| Type = [PointerType] Recursive ** +# 2610| ValueCategory = lvalue +# 2610| getRValue(): [AddressOfExpr] & ... +# 2610| Type = [PointerType] Recursive ** +# 2610| ValueCategory = prvalue +# 2610| getOperand(): [PointerFieldAccess] next +# 2610| Type = [PointerType] Recursive * +# 2610| ValueCategory = lvalue +# 2610| getQualifier(): [VariableAccess] a +# 2610| Type = [PointerType] Recursive * +# 2610| ValueCategory = prvalue(load) +# 2613| getStmt(3): [ReturnStmt] return ... +# 2613| getExpr(): [VariableAccess] b +# 2613| Type = [PointerType] Recursive * +# 2613| ValueCategory = prvalue(load) +# 2616| [TopLevelFunction] void use_const_int(int const*) +# 2616| : +# 2616| getParameter(0): [Parameter] (unnamed parameter 0) +# 2616| Type = [PointerType] const int * +# 2618| [TopLevelFunction] void escaping_pointer(bool) +# 2618| : +# 2618| getParameter(0): [Parameter] b +# 2618| Type = [BoolType] bool +# 2619| getEntryPoint(): [BlockStmt] { ... } +# 2620| getStmt(0): [DeclStmt] declaration +# 2620| getDeclarationEntry(0): [VariableDeclarationEntry] definition of data +# 2620| Type = [IntPointerType] int * +# 2621| getStmt(1): [DeclStmt] declaration +# 2621| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l1 +# 2621| Type = [IntType] int +# 2621| getDeclarationEntry(1): [VariableDeclarationEntry] definition of l2 +# 2621| Type = [IntType] int +# 2622| getStmt(2): [IfStmt] if (...) ... +# 2622| getCondition(): [VariableAccess] b +# 2622| Type = [BoolType] bool +# 2622| ValueCategory = prvalue(load) +# 2623| getThen(): [BlockStmt] { ... } +# 2624| getStmt(0): [ExprStmt] ExprStmt +# 2624| getExpr(): [AssignExpr] ... = ... +# 2624| Type = [IntPointerType] int * +# 2624| ValueCategory = lvalue +# 2624| getLValue(): [VariableAccess] data +# 2624| Type = [IntPointerType] int * +# 2624| ValueCategory = lvalue +# 2624| getRValue(): [AddressOfExpr] & ... +# 2624| Type = [IntPointerType] int * +# 2624| ValueCategory = prvalue +# 2624| getOperand(): [VariableAccess] l1 +# 2624| Type = [IntType] int +# 2624| ValueCategory = lvalue +# 2627| getElse(): [BlockStmt] { ... } +# 2628| getStmt(0): [ExprStmt] ExprStmt +# 2628| getExpr(): [AssignExpr] ... = ... +# 2628| Type = [IntPointerType] int * +# 2628| ValueCategory = lvalue +# 2628| getLValue(): [VariableAccess] data +# 2628| Type = [IntPointerType] int * +# 2628| ValueCategory = lvalue +# 2628| getRValue(): [AddressOfExpr] & ... +# 2628| Type = [IntPointerType] int * +# 2628| ValueCategory = prvalue +# 2628| getOperand(): [VariableAccess] l2 +# 2628| Type = [IntType] int +# 2628| ValueCategory = lvalue +# 2630| getStmt(3): [ExprStmt] ExprStmt +# 2630| getExpr(): [FunctionCall] call to use_const_int +# 2630| Type = [VoidType] void +# 2630| ValueCategory = prvalue +# 2630| getArgument(0): [VariableAccess] data +# 2630| Type = [IntPointerType] int * +# 2630| ValueCategory = prvalue(load) +# 2630| getArgument(0).getFullyConverted(): [CStyleCast] (const int *)... +# 2630| Conversion = [PointerConversion] pointer conversion +# 2630| Type = [PointerType] const int * +# 2630| ValueCategory = prvalue +# 2631| getStmt(4): [ReturnStmt] return ... +# 2636| [TopLevelFunction] void* malloc(unsigned long) +# 2636| : +# 2636| getParameter(0): [Parameter] (unnamed parameter 0) +# 2636| Type = [LongType] unsigned long +# 2637| [TopLevelFunction] void use_const_void_pointer(void const*) +# 2637| : +# 2637| getParameter(0): [Parameter] (unnamed parameter 0) +# 2637| Type = [PointerType] const void * +# 2639| [TopLevelFunction] void needs_chi_for_initialize_groups() +# 2639| : +# 2640| getEntryPoint(): [BlockStmt] { ... } +# 2641| getStmt(0): [IfStmt] if (...) ... +# 2641| getCondition(): [FunctionCall] call to predicateA +# 2641| Type = [BoolType] bool +# 2641| ValueCategory = prvalue +# 2642| getThen(): [BlockStmt] { ... } +# 2643| getStmt(0): [DeclStmt] declaration +# 2643| getDeclarationEntry(0): [VariableDeclarationEntry] definition of data +# 2643| Type = [PointerType] int64_t * +# 2643| getVariable().getInitializer(): [Initializer] initializer for data +# 2643| getExpr(): [FunctionCall] call to malloc +# 2643| Type = [VoidPointerType] void * +# 2643| ValueCategory = prvalue +# 2643| getArgument(0): [Literal] 100 +# 2643| Type = [IntType] int +# 2643| Value = [Literal] 100 +# 2643| ValueCategory = prvalue +# 2643| getArgument(0).getFullyConverted(): [CStyleCast] (unsigned long)... +# 2643| Conversion = [IntegralConversion] integral conversion +# 2643| Type = [LongType] unsigned long +# 2643| Value = [CStyleCast] 100 +# 2643| ValueCategory = prvalue +# 2643| getExpr().getFullyConverted(): [CStyleCast] (int64_t *)... +# 2643| Conversion = [PointerConversion] pointer conversion +# 2643| Type = [PointerType] int64_t * +# 2643| ValueCategory = prvalue +# 2644| getStmt(1): [IfStmt] if (...) ... +# 2644| getCondition(): [NEExpr] ... != ... +# 2644| Type = [BoolType] bool +# 2644| ValueCategory = prvalue +# 2644| getLeftOperand(): [VariableAccess] data +# 2644| Type = [PointerType] int64_t * +# 2644| ValueCategory = prvalue(load) +# 2644| getRightOperand(): [Literal] 0 +# 2644| Type = [IntType] int +# 2644| Value = [Literal] 0 +# 2644| ValueCategory = prvalue +# 2644| getLeftOperand().getFullyConverted(): [CStyleCast] (void *)... +# 2644| Conversion = [PointerConversion] pointer conversion +# 2644| Type = [VoidPointerType] void * +# 2644| ValueCategory = prvalue +# 2644| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2644| Type = [VoidPointerType] void * +# 2644| Value = [ParenthesisExpr] 0 +# 2644| ValueCategory = prvalue +# 2644| getExpr(): [CStyleCast] (void *)... +# 2644| Conversion = [IntegralToPointerConversion] integral to pointer conversion +# 2644| Type = [VoidPointerType] void * +# 2644| Value = [CStyleCast] 0 +# 2644| ValueCategory = prvalue +# 2645| getThen(): [BlockStmt] { ... } +# 2646| getStmt(0): [ExprStmt] ExprStmt +# 2646| getExpr(): [AssignExpr] ... = ... +# 2646| Type = [PointerType] int64_t * +# 2646| ValueCategory = lvalue +# 2646| getLValue(): [VariableAccess] data +# 2646| Type = [PointerType] int64_t * +# 2646| ValueCategory = lvalue +# 2646| getRValue(): [FunctionCall] call to malloc +# 2646| Type = [VoidPointerType] void * +# 2646| ValueCategory = prvalue +# 2646| getArgument(0): [Literal] 100 +# 2646| Type = [IntType] int +# 2646| Value = [Literal] 100 +# 2646| ValueCategory = prvalue +# 2646| getArgument(0).getFullyConverted(): [CStyleCast] (unsigned long)... +# 2646| Conversion = [IntegralConversion] integral conversion +# 2646| Type = [LongType] unsigned long +# 2646| Value = [CStyleCast] 100 +# 2646| ValueCategory = prvalue +# 2646| getRValue().getFullyConverted(): [CStyleCast] (int64_t *)... +# 2646| Conversion = [PointerConversion] pointer conversion +# 2646| Type = [PointerType] int64_t * +# 2646| ValueCategory = prvalue +# 2648| getStmt(2): [ExprStmt] ExprStmt +# 2648| getExpr(): [FunctionCall] call to use_const_void_pointer +# 2648| Type = [VoidType] void +# 2648| ValueCategory = prvalue +# 2648| getArgument(0): [VariableAccess] data +# 2648| Type = [PointerType] int64_t * +# 2648| ValueCategory = prvalue(load) +# 2648| getArgument(0).getFullyConverted(): [CStyleCast] (const void *)... +# 2648| Conversion = [PointerConversion] pointer conversion +# 2648| Type = [PointerType] const void * +# 2648| ValueCategory = prvalue +# 2651| getElse(): [BlockStmt] { ... } +# 2652| getStmt(0): [DeclStmt] declaration +# 2652| getDeclarationEntry(0): [VariableDeclarationEntry] definition of data +# 2652| Type = [PointerType] int64_t * +# 2652| getVariable().getInitializer(): [Initializer] initializer for data +# 2652| getExpr(): [FunctionCall] call to malloc +# 2652| Type = [VoidPointerType] void * +# 2652| ValueCategory = prvalue +# 2652| getArgument(0): [Literal] 100 +# 2652| Type = [IntType] int +# 2652| Value = [Literal] 100 +# 2652| ValueCategory = prvalue +# 2652| getArgument(0).getFullyConverted(): [CStyleCast] (unsigned long)... +# 2652| Conversion = [IntegralConversion] integral conversion +# 2652| Type = [LongType] unsigned long +# 2652| Value = [CStyleCast] 100 +# 2652| ValueCategory = prvalue +# 2652| getExpr().getFullyConverted(): [CStyleCast] (int64_t *)... +# 2652| Conversion = [PointerConversion] pointer conversion +# 2652| Type = [PointerType] int64_t * +# 2652| ValueCategory = prvalue +# 2653| getStmt(1): [IfStmt] if (...) ... +# 2653| getCondition(): [NEExpr] ... != ... +# 2653| Type = [BoolType] bool +# 2653| ValueCategory = prvalue +# 2653| getLeftOperand(): [VariableAccess] data +# 2653| Type = [PointerType] int64_t * +# 2653| ValueCategory = prvalue(load) +# 2653| getRightOperand(): [Literal] 0 +# 2653| Type = [IntType] int +# 2653| Value = [Literal] 0 +# 2653| ValueCategory = prvalue +# 2653| getLeftOperand().getFullyConverted(): [CStyleCast] (void *)... +# 2653| Conversion = [PointerConversion] pointer conversion +# 2653| Type = [VoidPointerType] void * +# 2653| ValueCategory = prvalue +# 2653| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2653| Type = [VoidPointerType] void * +# 2653| Value = [ParenthesisExpr] 0 +# 2653| ValueCategory = prvalue +# 2653| getExpr(): [CStyleCast] (void *)... +# 2653| Conversion = [IntegralToPointerConversion] integral to pointer conversion +# 2653| Type = [VoidPointerType] void * +# 2653| Value = [CStyleCast] 0 +# 2653| ValueCategory = prvalue +# 2654| getThen(): [BlockStmt] { ... } +# 2655| getStmt(0): [ExprStmt] ExprStmt +# 2655| getExpr(): [AssignExpr] ... = ... +# 2655| Type = [PointerType] int64_t * +# 2655| ValueCategory = lvalue +# 2655| getLValue(): [VariableAccess] data +# 2655| Type = [PointerType] int64_t * +# 2655| ValueCategory = lvalue +# 2655| getRValue(): [FunctionCall] call to malloc +# 2655| Type = [VoidPointerType] void * +# 2655| ValueCategory = prvalue +# 2655| getArgument(0): [Literal] 200 +# 2655| Type = [IntType] int +# 2655| Value = [Literal] 200 +# 2655| ValueCategory = prvalue +# 2655| getArgument(0).getFullyConverted(): [CStyleCast] (unsigned long)... +# 2655| Conversion = [IntegralConversion] integral conversion +# 2655| Type = [LongType] unsigned long +# 2655| Value = [CStyleCast] 200 +# 2655| ValueCategory = prvalue +# 2655| getRValue().getFullyConverted(): [CStyleCast] (int64_t *)... +# 2655| Conversion = [PointerConversion] pointer conversion +# 2655| Type = [PointerType] int64_t * +# 2655| ValueCategory = prvalue +# 2657| getStmt(2): [ExprStmt] ExprStmt +# 2657| getExpr(): [FunctionCall] call to use_const_void_pointer +# 2657| Type = [VoidType] void +# 2657| ValueCategory = prvalue +# 2657| getArgument(0): [VariableAccess] data +# 2657| Type = [PointerType] int64_t * +# 2657| ValueCategory = prvalue(load) +# 2657| getArgument(0).getFullyConverted(): [CStyleCast] (const void *)... +# 2657| Conversion = [PointerConversion] pointer conversion +# 2657| Type = [PointerType] const void * +# 2657| ValueCategory = prvalue +# 2659| getStmt(1): [ReturnStmt] return ... +# 2661| [TopLevelFunction] void use_int(int) +# 2661| : +# 2661| getParameter(0): [Parameter] (unnamed parameter 0) +# 2661| Type = [IntType] int +# 2663| [TopLevelFunction] void phi_with_single_input_at_merge(bool) +# 2663| : +# 2663| getParameter(0): [Parameter] b +# 2663| Type = [BoolType] bool +# 2664| getEntryPoint(): [BlockStmt] { ... } +# 2665| getStmt(0): [DeclStmt] declaration +# 2665| getDeclarationEntry(0): [VariableDeclarationEntry] definition of data +# 2665| Type = [IntPointerType] int * +# 2665| getVariable().getInitializer(): [Initializer] initializer for data +# 2665| getExpr(): [Literal] 0 +# 2665| Type = [NullPointerType] decltype(nullptr) +# 2665| Value = [Literal] 0 +# 2665| ValueCategory = prvalue +# 2665| getExpr().getFullyConverted(): [CStyleCast] (int *)... +# 2665| Conversion = [PointerConversion] pointer conversion +# 2665| Type = [IntPointerType] int * +# 2665| Value = [CStyleCast] 0 +# 2665| ValueCategory = prvalue +# 2666| getStmt(1): [IfStmt] if (...) ... +# 2666| getCondition(): [VariableAccess] b +# 2666| Type = [BoolType] bool +# 2666| ValueCategory = prvalue(load) +# 2666| getThen(): [BlockStmt] { ... } +# 2667| getStmt(0): [DeclStmt] declaration +# 2667| getDeclarationEntry(0): [VariableDeclarationEntry] definition of intBuffer +# 2667| Type = [IntType] int +# 2667| getVariable().getInitializer(): [Initializer] initializer for intBuffer +# 2667| getExpr(): [Literal] 8 +# 2667| Type = [IntType] int +# 2667| Value = [Literal] 8 +# 2667| ValueCategory = prvalue +# 2668| getStmt(1): [ExprStmt] ExprStmt +# 2668| getExpr(): [AssignExpr] ... = ... +# 2668| Type = [IntPointerType] int * +# 2668| ValueCategory = lvalue +# 2668| getLValue(): [VariableAccess] data +# 2668| Type = [IntPointerType] int * +# 2668| ValueCategory = lvalue +# 2668| getRValue(): [AddressOfExpr] & ... +# 2668| Type = [IntPointerType] int * +# 2668| ValueCategory = prvalue +# 2668| getOperand(): [VariableAccess] intBuffer +# 2668| Type = [IntType] int +# 2668| ValueCategory = lvalue +# 2670| getStmt(2): [ExprStmt] ExprStmt +# 2670| getExpr(): [FunctionCall] call to use_int +# 2670| Type = [VoidType] void +# 2670| ValueCategory = prvalue +# 2670| getArgument(0): [PointerDereferenceExpr] * ... +# 2670| Type = [IntType] int +# 2670| ValueCategory = prvalue(load) +# 2670| getOperand(): [VariableAccess] data +# 2670| Type = [IntPointerType] int * +# 2670| ValueCategory = prvalue(load) +# 2671| getStmt(3): [ReturnStmt] return ... +# 2673| [TopLevelFunction] void use(char const*) +# 2673| : +# 2673| getParameter(0): [Parameter] fmt +# 2673| Type = [PointerType] const char * +# 2684| [TopLevelFunction] void test(bool) +# 2684| : +# 2684| getParameter(0): [Parameter] b +# 2684| Type = [BoolType] bool +# 2685| getEntryPoint(): [BlockStmt] { ... } +# 2686| getStmt(0): [DoStmt] do (...) ... +# 2686| getCondition(): [Literal] 0 +# 2686| Type = [IntType] int +# 2686| Value = [Literal] 0 +# 2686| ValueCategory = prvalue +# 2686| getStmt(): [BlockStmt] { ... } +# 2686| getStmt(0): [ExprStmt] ExprStmt +# 2686| getExpr(): [FunctionCall] call to use +# 2686| Type = [VoidType] void +# 2686| ValueCategory = prvalue +# 2686| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2686| Type = [PointerType] const char * +# 2686| ValueCategory = prvalue +# 2686| getCondition(): [VariableAccess] b +# 2686| Type = [BoolType] bool +# 2686| ValueCategory = prvalue(load) +# 2686| getThen(): +# 2686| Type = [ArrayType] const char[1] +# 2686| Value = [StringLiteral] "" +# 2686| ValueCategory = lvalue +# 2686| getElse(): +# 2686| Type = [ArrayType] const char[1] +# 2686| Value = [StringLiteral] "" +# 2686| ValueCategory = lvalue +# 2686| getThen().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2686| Type = [PointerType] const char * +# 2686| ValueCategory = prvalue +# 2686| getElse().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2686| Type = [PointerType] const char * +# 2686| ValueCategory = prvalue +# 2686| getStmt(1): [ExprStmt] ExprStmt +# 2686| getExpr(): [FunctionCall] call to use +# 2686| Type = [VoidType] void +# 2686| ValueCategory = prvalue +# 2686| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2686| Type = [PointerType] const char * +# 2686| ValueCategory = prvalue +# 2686| getCondition(): [VariableAccess] b +# 2686| Type = [BoolType] bool +# 2686| ValueCategory = prvalue(load) +# 2686| getThen(): +# 2686| Type = [ArrayType] const char[1] +# 2686| Value = [StringLiteral] "" +# 2686| ValueCategory = lvalue +# 2686| getElse(): +# 2686| Type = [ArrayType] const char[1] +# 2686| Value = [StringLiteral] "" +# 2686| ValueCategory = lvalue +# 2686| getThen().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2686| Type = [PointerType] const char * +# 2686| ValueCategory = prvalue +# 2686| getElse().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2686| Type = [PointerType] const char * +# 2686| ValueCategory = prvalue +# 2686| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 2686| Conversion = [BoolConversion] conversion to bool +# 2686| Type = [BoolType] bool +# 2686| Value = [CStyleCast] 0 +# 2686| ValueCategory = prvalue +# 2687| getStmt(1): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index d3238068707e..ea445b599fa4 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -5263,20 +5263,23 @@ ir.cpp: # 486| void Conditional_LValue(bool) # 486| Block 0 -# 486| v486_1(void) = EnterFunction : -# 486| m486_2(unknown) = AliasedDefinition : -# 486| m486_3(unknown) = InitializeNonLocal : -# 486| m486_4(unknown) = Chi : total:m486_2, partial:m486_3 -# 486| r486_5(glval) = VariableAddress[a] : -# 486| m486_6(bool) = InitializeParameter[a] : &:r486_5 -# 487| r487_1(glval) = VariableAddress[x] : -# 487| m487_2(int) = Uninitialized[x] : &:r487_1 -# 488| r488_1(glval) = VariableAddress[y] : -# 488| m488_2(int) = Uninitialized[y] : &:r488_1 -# 489| r489_1(int) = Constant[5] : -# 489| r489_2(glval) = VariableAddress[a] : -# 489| r489_3(bool) = Load[a] : &:r489_2, m486_6 -# 489| v489_4(void) = ConditionalBranch : r489_3 +# 486| v486_1(void) = EnterFunction : +# 486| m486_2(unknown) = AliasedDefinition : +# 486| m486_3(unknown) = InitializeNonLocal : +# 486| m486_4(unknown) = Chi : total:m486_2, partial:m486_3 +# 486| m486_5(int) = UninitializedGroup[x,y] : +# 486| r486_6(glval) = VariableAddress[a] : +# 486| m486_7(bool) = InitializeParameter[a] : &:r486_6 +# 487| r487_1(glval) = VariableAddress[x] : +# 487| m487_2(int) = Uninitialized[x] : &:r487_1 +# 487| m487_3(int) = Chi : total:m486_5, partial:m487_2 +# 488| r488_1(glval) = VariableAddress[y] : +# 488| m488_2(int) = Uninitialized[y] : &:r488_1 +# 488| m488_3(int) = Chi : total:m487_3, partial:m488_2 +# 489| r489_1(int) = Constant[5] : +# 489| r489_2(glval) = VariableAddress[a] : +# 489| r489_3(bool) = Load[a] : &:r489_2, m486_7 +# 489| v489_4(void) = ConditionalBranch : r489_3 #-----| False -> Block 3 #-----| True -> Block 2 @@ -5285,11 +5288,11 @@ ir.cpp: # 489| r489_6(glval) = VariableAddress[#temp489:6] : # 489| r489_7(glval) = Load[#temp489:6] : &:r489_6, m489_5 # 489| m489_8(int) = Store[?] : &:r489_7, r489_1 -# 489| m489_9(unknown) = Chi : total:m486_4, partial:m489_8 +# 489| m489_9(int) = Chi : total:m488_3, partial:m489_8 # 490| v490_1(void) = NoOp : -# 486| v486_7(void) = ReturnVoid : -# 486| v486_8(void) = AliasedUse : ~m489_9 -# 486| v486_9(void) = ExitFunction : +# 486| v486_8(void) = ReturnVoid : +# 486| v486_9(void) = AliasedUse : m486_3 +# 486| v486_10(void) = ExitFunction : # 489| Block 2 # 489| r489_10(glval) = VariableAddress[x] : @@ -14072,21 +14075,24 @@ ir.cpp: # 2059| void TernaryTestInt(bool, int, int, int) # 2059| Block 0 -# 2059| v2059_1(void) = EnterFunction : -# 2059| m2059_2(unknown) = AliasedDefinition : -# 2059| m2059_3(unknown) = InitializeNonLocal : -# 2059| m2059_4(unknown) = Chi : total:m2059_2, partial:m2059_3 -# 2059| r2059_5(glval) = VariableAddress[a] : -# 2059| m2059_6(bool) = InitializeParameter[a] : &:r2059_5 -# 2059| r2059_7(glval) = VariableAddress[x] : -# 2059| m2059_8(int) = InitializeParameter[x] : &:r2059_7 -# 2059| r2059_9(glval) = VariableAddress[y] : -# 2059| m2059_10(int) = InitializeParameter[y] : &:r2059_9 -# 2059| r2059_11(glval) = VariableAddress[z] : -# 2059| m2059_12(int) = InitializeParameter[z] : &:r2059_11 -# 2060| r2060_1(glval) = VariableAddress[a] : -# 2060| r2060_2(bool) = Load[a] : &:r2060_1, m2059_6 -# 2060| v2060_3(void) = ConditionalBranch : r2060_2 +# 2059| v2059_1(void) = EnterFunction : +# 2059| m2059_2(unknown) = AliasedDefinition : +# 2059| m2059_3(unknown) = InitializeNonLocal : +# 2059| m2059_4(unknown) = Chi : total:m2059_2, partial:m2059_3 +# 2059| m2059_5(int) = UninitializedGroup[x,y] : +# 2059| r2059_6(glval) = VariableAddress[a] : +# 2059| m2059_7(bool) = InitializeParameter[a] : &:r2059_6 +# 2059| r2059_8(glval) = VariableAddress[x] : +# 2059| m2059_9(int) = InitializeParameter[x] : &:r2059_8 +# 2059| m2059_10(int) = Chi : total:m2059_5, partial:m2059_9 +# 2059| r2059_11(glval) = VariableAddress[y] : +# 2059| m2059_12(int) = InitializeParameter[y] : &:r2059_11 +# 2059| m2059_13(int) = Chi : total:m2059_10, partial:m2059_12 +# 2059| r2059_14(glval) = VariableAddress[z] : +# 2059| m2059_15(int) = InitializeParameter[z] : &:r2059_14 +# 2060| r2060_1(glval) = VariableAddress[a] : +# 2060| r2060_2(bool) = Load[a] : &:r2060_1, m2059_7 +# 2060| v2060_3(void) = ConditionalBranch : r2060_2 #-----| False -> Block 3 #-----| True -> Block 2 @@ -14097,21 +14103,21 @@ ir.cpp: # 2060| r2060_7(glval) = VariableAddress[z] : # 2060| m2060_8(int) = Store[z] : &:r2060_7, r2060_6 # 2061| r2061_1(glval) = VariableAddress[a] : -# 2061| r2061_2(bool) = Load[a] : &:r2061_1, m2059_6 +# 2061| r2061_2(bool) = Load[a] : &:r2061_1, m2059_7 # 2061| v2061_3(void) = ConditionalBranch : r2061_2 #-----| False -> Block 6 #-----| True -> Block 5 # 2060| Block 2 # 2060| r2060_9(glval) = VariableAddress[x] : -# 2060| r2060_10(int) = Load[x] : &:r2060_9, m2059_8 +# 2060| r2060_10(int) = Load[x] : &:r2060_9, m2059_9 # 2060| r2060_11(glval) = VariableAddress[#temp2060:9] : # 2060| m2060_12(int) = Store[#temp2060:9] : &:r2060_11, r2060_10 #-----| Goto -> Block 1 # 2060| Block 3 # 2060| r2060_13(glval) = VariableAddress[y] : -# 2060| r2060_14(int) = Load[y] : &:r2060_13, m2059_10 +# 2060| r2060_14(int) = Load[y] : &:r2060_13, m2059_12 # 2060| r2060_15(glval) = VariableAddress[#temp2060:9] : # 2060| m2060_16(int) = Store[#temp2060:9] : &:r2060_15, r2060_14 #-----| Goto -> Block 1 @@ -14123,14 +14129,14 @@ ir.cpp: # 2061| r2061_7(glval) = VariableAddress[z] : # 2061| m2061_8(int) = Store[z] : &:r2061_7, r2061_6 # 2062| r2062_1(glval) = VariableAddress[a] : -# 2062| r2062_2(bool) = Load[a] : &:r2062_1, m2059_6 +# 2062| r2062_2(bool) = Load[a] : &:r2062_1, m2059_7 # 2062| v2062_3(void) = ConditionalBranch : r2062_2 #-----| False -> Block 9 #-----| True -> Block 8 # 2061| Block 5 # 2061| r2061_9(glval) = VariableAddress[x] : -# 2061| r2061_10(int) = Load[x] : &:r2061_9, m2059_8 +# 2061| r2061_10(int) = Load[x] : &:r2061_9, m2059_9 # 2061| r2061_11(glval) = VariableAddress[#temp2061:9] : # 2061| m2061_12(int) = Store[#temp2061:9] : &:r2061_11, r2061_10 #-----| Goto -> Block 4 @@ -14149,7 +14155,7 @@ ir.cpp: # 2062| m2062_8(int) = Store[z] : &:r2062_7, r2062_6 # 2063| r2063_1(int) = Constant[7] : # 2063| r2063_2(glval) = VariableAddress[a] : -# 2063| r2063_3(bool) = Load[a] : &:r2063_2, m2059_6 +# 2063| r2063_3(bool) = Load[a] : &:r2063_2, m2059_7 # 2063| v2063_4(void) = ConditionalBranch : r2063_3 #-----| False -> Block 12 #-----| True -> Block 11 @@ -14171,11 +14177,11 @@ ir.cpp: # 2063| r2063_6(glval) = VariableAddress[#temp2063:6] : # 2063| r2063_7(glval) = Load[#temp2063:6] : &:r2063_6, m2063_5 # 2063| m2063_8(int) = Store[?] : &:r2063_7, r2063_1 -# 2063| m2063_9(unknown) = Chi : total:m2059_4, partial:m2063_8 +# 2063| m2063_9(int) = Chi : total:m2059_13, partial:m2063_8 # 2064| v2064_1(void) = NoOp : -# 2059| v2059_13(void) = ReturnVoid : -# 2059| v2059_14(void) = AliasedUse : ~m2063_9 -# 2059| v2059_15(void) = ExitFunction : +# 2059| v2059_16(void) = ReturnVoid : +# 2059| v2059_17(void) = AliasedUse : m2059_3 +# 2059| v2059_18(void) = ExitFunction : # 2063| Block 11 # 2063| r2063_10(glval) = VariableAddress[x] : @@ -14419,18 +14425,21 @@ ir.cpp: # 2080| m2080_2(unknown) = AliasedDefinition : # 2080| m2080_3(unknown) = InitializeNonLocal : # 2080| m2080_4(unknown) = Chi : total:m2080_2, partial:m2080_3 -# 2080| r2080_5(glval) = VariableAddress[a] : -# 2080| m2080_6(bool) = InitializeParameter[a] : &:r2080_5 -# 2080| r2080_7(glval) = VariableAddress[x] : -# 2080| m2080_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2080_7 -# 2080| r2080_9(glval) = VariableAddress[y] : -# 2080| m2080_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2080_9 -# 2080| r2080_11(glval) = VariableAddress[z] : -# 2080| m2080_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2080_11 +# 2080| m2080_5(unknown) = UninitializedGroup[x,y] : +# 2080| r2080_6(glval) = VariableAddress[a] : +# 2080| m2080_7(bool) = InitializeParameter[a] : &:r2080_6 +# 2080| r2080_8(glval) = VariableAddress[x] : +# 2080| m2080_9(TernaryNonPodObj) = InitializeParameter[x] : &:r2080_8 +# 2080| m2080_10(unknown) = Chi : total:m2080_5, partial:m2080_9 +# 2080| r2080_11(glval) = VariableAddress[y] : +# 2080| m2080_12(TernaryNonPodObj) = InitializeParameter[y] : &:r2080_11 +# 2080| m2080_13(unknown) = Chi : total:m2080_10, partial:m2080_12 +# 2080| r2080_14(glval) = VariableAddress[z] : +# 2080| m2080_15(TernaryNonPodObj) = InitializeParameter[z] : &:r2080_14 # 2081| r2081_1(glval) = VariableAddress[z] : # 2081| r2081_2(glval) = FunctionAddress[operator=] : # 2081| r2081_3(glval) = VariableAddress[a] : -# 2081| r2081_4(bool) = Load[a] : &:r2081_3, m2080_6 +# 2081| r2081_4(bool) = Load[a] : &:r2081_3, m2080_7 # 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 3 #-----| True -> Block 2 @@ -14444,16 +14453,16 @@ ir.cpp: # 2081| r2081_11(TernaryNonPodObj &) = Call[operator=] : func:r2081_2, this:r2081_1, 0:r2081_10 # 2081| m2081_12(unknown) = ^CallSideEffect : ~m2080_4 # 2081| m2081_13(unknown) = Chi : total:m2080_4, partial:m2081_12 -# 2081| v2081_14(void) = ^IndirectReadSideEffect[-1] : &:r2081_1, m2080_12 -# 2081| v2081_15(void) = ^BufferReadSideEffect[0] : &:r2081_10, ~m2081_13 +# 2081| v2081_14(void) = ^IndirectReadSideEffect[-1] : &:r2081_1, m2080_15 +# 2081| v2081_15(void) = ^BufferReadSideEffect[0] : &:r2081_10, ~m2080_13 # 2081| m2081_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2081_1 -# 2081| m2081_17(TernaryNonPodObj) = Chi : total:m2080_12, partial:m2081_16 +# 2081| m2081_17(TernaryNonPodObj) = Chi : total:m2080_15, partial:m2081_16 # 2081| r2081_18(glval) = CopyValue : r2081_11 # 2082| r2082_1(glval) = VariableAddress[z] : # 2082| r2082_2(glval) = FunctionAddress[operator=] : # 2082| r2082_3(glval) = VariableAddress[#temp2082:9] : # 2082| r2082_4(glval) = VariableAddress[a] : -# 2082| r2082_5(bool) = Load[a] : &:r2082_4, m2080_6 +# 2082| r2082_5(bool) = Load[a] : &:r2082_4, m2080_7 # 2082| v2082_6(void) = ConditionalBranch : r2082_5 #-----| False -> Block 6 #-----| True -> Block 5 @@ -14499,7 +14508,7 @@ ir.cpp: # 2083| r2083_2(glval) = FunctionAddress[operator=] : # 2083| r2083_3(glval) = VariableAddress[#temp2083:9] : # 2083| r2083_4(glval) = VariableAddress[a] : -# 2083| r2083_5(bool) = Load[a] : &:r2083_4, m2080_6 +# 2083| r2083_5(bool) = Load[a] : &:r2083_4, m2080_7 # 2083| v2083_6(void) = ConditionalBranch : r2083_5 #-----| False -> Block 9 #-----| True -> Block 8 @@ -14514,7 +14523,7 @@ ir.cpp: # 2082| v2082_37(void) = Call[TernaryNonPodObj] : func:r2082_33, this:r2082_31, 0:r2082_36 # 2082| m2082_38(unknown) = ^CallSideEffect : ~m2081_13 # 2082| m2082_39(unknown) = Chi : total:m2081_13, partial:m2082_38 -# 2082| v2082_40(void) = ^BufferReadSideEffect[0] : &:r2082_36, ~m2080_8 +# 2082| v2082_40(void) = ^BufferReadSideEffect[0] : &:r2082_36, ~m2080_9 # 2082| m2082_41(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_31 # 2082| m2082_42(TernaryNonPodObj) = Chi : total:m2082_32, partial:m2082_41 # 2082| r2082_43(TernaryNonPodObj) = Load[#temp2082:13] : &:r2082_31, m2082_42 @@ -14564,7 +14573,7 @@ ir.cpp: # 2084| r2084_1(glval) = VariableAddress[z] : # 2084| r2084_2(glval) = FunctionAddress[operator=] : # 2084| r2084_3(glval) = VariableAddress[a] : -# 2084| r2084_4(bool) = Load[a] : &:r2084_3, m2080_6 +# 2084| r2084_4(bool) = Load[a] : &:r2084_3, m2080_7 # 2084| v2084_5(void) = ConditionalBranch : r2084_4 #-----| False -> Block 12 #-----| True -> Block 11 @@ -14607,7 +14616,7 @@ ir.cpp: # 2084| m2084_12(unknown) = ^CallSideEffect : ~m2083_29 # 2084| m2084_13(unknown) = Chi : total:m2083_29, partial:m2084_12 # 2084| v2084_14(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, m2083_21 -# 2084| v2084_15(void) = ^BufferReadSideEffect[0] : &:r2084_10, ~m2084_13 +# 2084| v2084_15(void) = ^BufferReadSideEffect[0] : &:r2084_10, ~m2080_13 # 2084| m2084_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 # 2084| m2084_17(TernaryNonPodObj) = Chi : total:m2083_21, partial:m2084_16 # 2084| r2084_18(glval) = CopyValue : r2084_11 @@ -14640,9 +14649,9 @@ ir.cpp: # 2084| m2084_45(unknown) = Chi : total:m2084_42, partial:m2084_44 # 2084| r2084_46(glval) = CopyValue : r2084_31 # 2085| v2085_1(void) = NoOp : -# 2080| v2080_13(void) = ReturnVoid : -# 2080| v2080_14(void) = AliasedUse : ~m2084_42 -# 2080| v2080_15(void) = ExitFunction : +# 2080| v2080_16(void) = ReturnVoid : +# 2080| v2080_17(void) = AliasedUse : ~m2084_42 +# 2080| v2080_18(void) = ExitFunction : # 2084| Block 11 # 2084| r2084_47(glval) = VariableAddress[x] : @@ -18395,6 +18404,534 @@ ir.cpp: # 2555| v2555_8(void) = AliasedUse : m2555_3 # 2555| v2555_9(void) = ExitFunction : +# 2559| void p_points_to_x_or_y(int, int) +# 2559| Block 0 +# 2559| v2559_1(void) = EnterFunction : +# 2559| m2559_2(unknown) = AliasedDefinition : +# 2559| m2559_3(unknown) = InitializeNonLocal : +# 2559| m2559_4(unknown) = Chi : total:m2559_2, partial:m2559_3 +# 2559| m2559_5(int) = UninitializedGroup[x,y] : +# 2559| r2559_6(glval) = VariableAddress[a] : +# 2559| m2559_7(int) = InitializeParameter[a] : &:r2559_6 +# 2559| r2559_8(glval) = VariableAddress[b] : +# 2559| m2559_9(int) = InitializeParameter[b] : &:r2559_8 +# 2560| r2560_1(glval) = VariableAddress[x] : +# 2560| m2560_2(int) = Uninitialized[x] : &:r2560_1 +# 2560| m2560_3(int) = Chi : total:m2559_5, partial:m2560_2 +# 2561| r2561_1(glval) = VariableAddress[y] : +# 2561| m2561_2(int) = Uninitialized[y] : &:r2561_1 +# 2561| m2561_3(int) = Chi : total:m2560_3, partial:m2561_2 +# 2562| r2562_1(glval) = VariableAddress[p] : +# 2562| m2562_2(int *) = Uninitialized[p] : &:r2562_1 +# 2563| r2563_1(glval) = VariableAddress[a] : +# 2563| r2563_2(int) = Load[a] : &:r2563_1, m2559_7 +# 2563| r2563_3(glval) = VariableAddress[b] : +# 2563| r2563_4(int) = Load[b] : &:r2563_3, m2559_9 +# 2563| r2563_5(bool) = CompareLT : r2563_2, r2563_4 +# 2563| v2563_6(void) = ConditionalBranch : r2563_5 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2564| Block 1 +# 2564| r2564_1(glval) = VariableAddress[x] : +# 2564| r2564_2(int *) = CopyValue : r2564_1 +# 2564| r2564_3(glval) = VariableAddress[p] : +# 2564| m2564_4(int *) = Store[p] : &:r2564_3, r2564_2 +#-----| Goto -> Block 3 + +# 2566| Block 2 +# 2566| r2566_1(glval) = VariableAddress[y] : +# 2566| r2566_2(int *) = CopyValue : r2566_1 +# 2566| r2566_3(glval) = VariableAddress[p] : +# 2566| m2566_4(int *) = Store[p] : &:r2566_3, r2566_2 +#-----| Goto -> Block 3 + +# 2568| Block 3 +# 2568| m2568_1(int *) = Phi : from 1:m2564_4, from 2:m2566_4 +# 2568| r2568_2(int) = Constant[5] : +# 2568| r2568_3(glval) = VariableAddress[p] : +# 2568| r2568_4(int *) = Load[p] : &:r2568_3, m2568_1 +# 2568| r2568_5(glval) = CopyValue : r2568_4 +# 2568| m2568_6(int) = Store[?] : &:r2568_5, r2568_2 +# 2568| m2568_7(int) = Chi : total:m2561_3, partial:m2568_6 +# 2569| r2569_1(glval) = VariableAddress[z] : +# 2569| r2569_2(glval) = VariableAddress[x] : +# 2569| r2569_3(int) = Load[x] : &:r2569_2, ~m2568_7 +# 2569| m2569_4(int) = Store[z] : &:r2569_1, r2569_3 +# 2570| r2570_1(glval) = VariableAddress[w] : +# 2570| r2570_2(glval) = VariableAddress[y] : +# 2570| r2570_3(int) = Load[y] : &:r2570_2, ~m2568_7 +# 2570| m2570_4(int) = Store[w] : &:r2570_1, r2570_3 +# 2571| v2571_1(void) = NoOp : +# 2559| v2559_10(void) = ReturnVoid : +# 2559| v2559_11(void) = AliasedUse : m2559_3 +# 2559| v2559_12(void) = ExitFunction : + +# 2573| int phi_after_while() +# 2573| Block 0 +# 2573| v2573_1(void) = EnterFunction : +# 2573| m2573_2(unknown) = AliasedDefinition : +# 2573| m2573_3(unknown) = InitializeNonLocal : +# 2573| m2573_4(unknown) = Chi : total:m2573_2, partial:m2573_3 +# 2573| m2573_5(int) = UninitializedGroup[r,s] : +# 2574| r2574_1(glval) = VariableAddress[r] : +# 2574| m2574_2(int) = Uninitialized[r] : &:r2574_1 +# 2574| m2574_3(int) = Chi : total:m2573_5, partial:m2574_2 +# 2575| r2575_1(glval) = VariableAddress[rP] : +# 2575| r2575_2(glval) = VariableAddress[r] : +# 2575| r2575_3(int *) = CopyValue : r2575_2 +# 2575| m2575_4(int *) = Store[rP] : &:r2575_1, r2575_3 +#-----| Goto -> Block 1 + +# 2577| Block 1 +# 2577| m2577_1(int) = Phi : from 0:m2574_3, from 2:m2579_7 +# 2577| m2577_2(unknown) = Phi : from 0:~m2573_4, from 2:~m2577_7 +# 2577| m2577_3(int *) = Phi : from 0:m2575_4, from 2:m2580_4 +# 2577| r2577_4(glval) = FunctionAddress[predicateA] : +# 2577| r2577_5(bool) = Call[predicateA] : func:r2577_4 +# 2577| m2577_6(unknown) = ^CallSideEffect : ~m2577_2 +# 2577| m2577_7(unknown) = Chi : total:m2577_2, partial:m2577_6 +# 2577| v2577_8(void) = ConditionalBranch : r2577_5 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2578| Block 2 +# 2578| r2578_1(glval) = VariableAddress[s] : +# 2578| r2578_2(int) = Constant[0] : +# 2578| m2578_3(int) = Store[s] : &:r2578_1, r2578_2 +# 2578| m2578_4(int) = Chi : total:m2577_1, partial:m2578_3 +# 2579| r2579_1(glval) = VariableAddress[s] : +# 2579| r2579_2(int) = Load[s] : &:r2579_1, m2578_3 +# 2579| r2579_3(glval) = VariableAddress[rP] : +# 2579| r2579_4(int *) = Load[rP] : &:r2579_3, m2577_3 +# 2579| r2579_5(glval) = CopyValue : r2579_4 +# 2579| m2579_6(int) = Store[?] : &:r2579_5, r2579_2 +# 2579| m2579_7(int) = Chi : total:m2578_4, partial:m2579_6 +# 2580| r2580_1(glval) = VariableAddress[s] : +# 2580| r2580_2(int *) = CopyValue : r2580_1 +# 2580| r2580_3(glval) = VariableAddress[rP] : +# 2580| m2580_4(int *) = Store[rP] : &:r2580_3, r2580_2 +#-----| Goto (back edge) -> Block 1 + +# 2583| Block 3 +# 2583| r2583_1(glval) = VariableAddress[#return] : +# 2583| r2583_2(glval) = VariableAddress[r] : +# 2583| r2583_3(int) = Load[r] : &:r2583_2, ~m2577_1 +# 2583| m2583_4(int) = Store[#return] : &:r2583_1, r2583_3 +# 2573| r2573_6(glval) = VariableAddress[#return] : +# 2573| v2573_7(void) = ReturnValue : &:r2573_6, m2583_4 +# 2573| v2573_8(void) = AliasedUse : ~m2577_7 +# 2573| v2573_9(void) = ExitFunction : + +# 2588| char* recursive_conditional_call_with_increment(char*, bool) +# 2588| Block 0 +# 2588| v2588_1(void) = EnterFunction : +# 2588| m2588_2(unknown) = AliasedDefinition : +# 2588| m2588_3(unknown) = InitializeNonLocal : +# 2588| m2588_4(unknown) = Chi : total:m2588_2, partial:m2588_3 +# 2588| r2588_5(glval) = VariableAddress[d] : +# 2588| m2588_6(char *) = InitializeParameter[d] : &:r2588_5 +# 2588| r2588_7(char *) = Load[d] : &:r2588_5, m2588_6 +# 2588| m2588_8(unknown) = InitializeIndirection[d] : &:r2588_7 +# 2588| r2588_9(glval) = VariableAddress[b] : +# 2588| m2588_10(bool) = InitializeParameter[b] : &:r2588_9 +# 2590| r2590_1(glval) = VariableAddress[b] : +# 2590| r2590_2(bool) = Load[b] : &:r2590_1, m2588_10 +# 2590| v2590_3(void) = ConditionalBranch : r2590_2 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2591| Block 1 +# 2591| r2591_1(glval) = FunctionAddress[recursive_conditional_call_with_increment] : +# 2591| r2591_2(glval) = VariableAddress[d] : +# 2591| r2591_3(char *) = Load[d] : &:r2591_2, m2588_6 +# 2591| r2591_4(glval) = VariableAddress[b] : +# 2591| r2591_5(bool) = Load[b] : &:r2591_4, m2588_10 +# 2591| r2591_6(char *) = Call[recursive_conditional_call_with_increment] : func:r2591_1, 0:r2591_3, 1:r2591_5 +# 2591| m2591_7(unknown) = ^CallSideEffect : ~m2588_4 +# 2591| m2591_8(unknown) = Chi : total:m2588_4, partial:m2591_7 +# 2591| v2591_9(void) = ^BufferReadSideEffect[0] : &:r2591_3, ~m2588_8 +# 2591| m2591_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2591_3 +# 2591| m2591_11(unknown) = Chi : total:m2588_8, partial:m2591_10 +# 2591| r2591_12(glval) = VariableAddress[d] : +# 2591| m2591_13(char *) = Store[d] : &:r2591_12, r2591_6 +#-----| Goto -> Block 2 + +# 2593| Block 2 +# 2593| m2593_1(unknown) = Phi : from 0:m2588_8, from 1:m2591_11 +# 2593| m2593_2(unknown) = Phi : from 0:~m2588_4, from 1:~m2591_8 +# 2593| m2593_3(char *) = Phi : from 0:m2588_6, from 1:m2591_13 +# 2593| r2593_4(glval) = VariableAddress[d] : +# 2593| r2593_5(char *) = Load[d] : &:r2593_4, m2593_3 +# 2593| r2593_6(int) = Constant[1] : +# 2593| r2593_7(char *) = PointerAdd[1] : r2593_5, r2593_6 +# 2593| m2593_8(char *) = Store[d] : &:r2593_4, r2593_7 +# 2594| r2594_1(glval) = VariableAddress[#return] : +# 2594| r2594_2(glval) = VariableAddress[d] : +# 2594| r2594_3(char *) = Load[d] : &:r2594_2, m2593_8 +# 2594| m2594_4(char *) = Store[#return] : &:r2594_1, r2594_3 +# 2588| v2588_11(void) = ReturnIndirection[d] : &:r2588_7, m2593_1 +# 2588| r2588_12(glval) = VariableAddress[#return] : +# 2588| v2588_13(void) = ReturnValue : &:r2588_12, m2594_4 +# 2588| v2588_14(void) = AliasedUse : ~m2593_2 +# 2588| v2588_15(void) = ExitFunction : + +# 2602| Recursive* merge(Recursive*) +# 2602| Block 0 +# 2602| v2602_1(void) = EnterFunction : +# 2602| m2602_2(unknown) = AliasedDefinition : +# 2602| m2602_3(unknown) = InitializeNonLocal : +# 2602| m2602_4(unknown) = Chi : total:m2602_2, partial:m2602_3 +# 2602| m2602_5(Recursive *) = UninitializedGroup[a,b] : +# 2602| m2602_6(unknown) = Chi : total:m2602_4, partial:m2602_5 +# 2602| r2602_7(glval) = VariableAddress[a] : +# 2602| m2602_8(Recursive *) = InitializeParameter[a] : &:r2602_7 +# 2602| r2602_9(Recursive *) = Load[a] : &:r2602_7, m2602_8 +# 2602| m2602_10(unknown) = InitializeIndirection[a] : &:r2602_9 +# 2602| m2602_11(unknown) = Chi : total:m2602_6, partial:m2602_10 +# 2604| r2604_1(glval) = VariableAddress[b] : +# 2604| m2604_2(Recursive *) = Uninitialized[b] : &:r2604_1 +# 2604| m2604_3(unknown) = Chi : total:m2602_11, partial:m2604_2 +# 2605| r2605_1(glval) = VariableAddress[p] : +# 2605| r2605_2(glval) = VariableAddress[b] : +# 2605| r2605_3(Recursive **) = CopyValue : r2605_2 +# 2605| m2605_4(Recursive **) = Store[p] : &:r2605_1, r2605_3 +#-----| Goto -> Block 1 + +# 2607| Block 1 +# 2607| m2607_1(unknown) = Phi : from 0:~m2604_3, from 2:~m2609_7 +# 2607| m2607_2(Recursive **) = Phi : from 0:m2605_4, from 2:m2610_6 +# 2607| r2607_3(glval) = FunctionAddress[predicateA] : +# 2607| r2607_4(bool) = Call[predicateA] : func:r2607_3 +# 2607| m2607_5(unknown) = ^CallSideEffect : ~m2607_1 +# 2607| m2607_6(unknown) = Chi : total:m2607_1, partial:m2607_5 +# 2607| v2607_7(void) = ConditionalBranch : r2607_4 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2609| Block 2 +# 2609| r2609_1(glval) = VariableAddress[a] : +# 2609| r2609_2(Recursive *) = Load[a] : &:r2609_1, m2602_8 +# 2609| r2609_3(glval) = VariableAddress[p] : +# 2609| r2609_4(Recursive **) = Load[p] : &:r2609_3, m2607_2 +# 2609| r2609_5(glval) = CopyValue : r2609_4 +# 2609| m2609_6(Recursive *) = Store[?] : &:r2609_5, r2609_2 +# 2609| m2609_7(unknown) = Chi : total:m2607_6, partial:m2609_6 +# 2610| r2610_1(glval) = VariableAddress[a] : +# 2610| r2610_2(Recursive *) = Load[a] : &:r2610_1, m2602_8 +# 2610| r2610_3(glval) = FieldAddress[next] : r2610_2 +# 2610| r2610_4(Recursive **) = CopyValue : r2610_3 +# 2610| r2610_5(glval) = VariableAddress[p] : +# 2610| m2610_6(Recursive **) = Store[p] : &:r2610_5, r2610_4 +#-----| Goto (back edge) -> Block 1 + +# 2613| Block 3 +# 2613| r2613_1(glval) = VariableAddress[#return] : +# 2613| r2613_2(glval) = VariableAddress[b] : +# 2613| r2613_3(Recursive *) = Load[b] : &:r2613_2, ~m2607_6 +# 2613| m2613_4(Recursive *) = Store[#return] : &:r2613_1, r2613_3 +# 2602| v2602_12(void) = ReturnIndirection[a] : &:r2602_9, ~m2607_6 +# 2602| r2602_13(glval) = VariableAddress[#return] : +# 2602| v2602_14(void) = ReturnValue : &:r2602_13, m2613_4 +# 2602| v2602_15(void) = AliasedUse : ~m2607_6 +# 2602| v2602_16(void) = ExitFunction : + +# 2618| void escaping_pointer(bool) +# 2618| Block 0 +# 2618| v2618_1(void) = EnterFunction : +# 2618| m2618_2(unknown) = AliasedDefinition : +# 2618| m2618_3(unknown) = InitializeNonLocal : +# 2618| m2618_4(unknown) = Chi : total:m2618_2, partial:m2618_3 +# 2618| m2618_5(unknown) = UninitializedGroup[l1,l2] : +# 2618| m2618_6(unknown) = Chi : total:m2618_4, partial:m2618_5 +# 2618| r2618_7(glval) = VariableAddress[b] : +# 2618| m2618_8(bool) = InitializeParameter[b] : &:r2618_7 +# 2620| r2620_1(glval) = VariableAddress[data] : +# 2620| m2620_2(int *) = Uninitialized[data] : &:r2620_1 +# 2621| r2621_1(glval) = VariableAddress[l1] : +# 2621| m2621_2(int) = Uninitialized[l1] : &:r2621_1 +# 2621| m2621_3(unknown) = Chi : total:m2618_6, partial:m2621_2 +# 2621| r2621_4(glval) = VariableAddress[l2] : +# 2621| m2621_5(int) = Uninitialized[l2] : &:r2621_4 +# 2621| m2621_6(unknown) = Chi : total:m2621_3, partial:m2621_5 +# 2622| r2622_1(glval) = VariableAddress[b] : +# 2622| r2622_2(bool) = Load[b] : &:r2622_1, m2618_8 +# 2622| v2622_3(void) = ConditionalBranch : r2622_2 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2624| Block 1 +# 2624| r2624_1(glval) = VariableAddress[l1] : +# 2624| r2624_2(int *) = CopyValue : r2624_1 +# 2624| r2624_3(glval) = VariableAddress[data] : +# 2624| m2624_4(int *) = Store[data] : &:r2624_3, r2624_2 +#-----| Goto -> Block 3 + +# 2628| Block 2 +# 2628| r2628_1(glval) = VariableAddress[l2] : +# 2628| r2628_2(int *) = CopyValue : r2628_1 +# 2628| r2628_3(glval) = VariableAddress[data] : +# 2628| m2628_4(int *) = Store[data] : &:r2628_3, r2628_2 +#-----| Goto -> Block 3 + +# 2630| Block 3 +# 2630| m2630_1(int *) = Phi : from 1:m2624_4, from 2:m2628_4 +# 2630| r2630_2(glval) = FunctionAddress[use_const_int] : +# 2630| r2630_3(glval) = VariableAddress[data] : +# 2630| r2630_4(int *) = Load[data] : &:r2630_3, m2630_1 +# 2630| r2630_5(int *) = Convert : r2630_4 +# 2630| v2630_6(void) = Call[use_const_int] : func:r2630_2, 0:r2630_5 +# 2630| m2630_7(unknown) = ^CallSideEffect : ~m2621_6 +# 2630| m2630_8(unknown) = Chi : total:m2621_6, partial:m2630_7 +# 2630| v2630_9(void) = ^BufferReadSideEffect[0] : &:r2630_5, ~m2630_8 +# 2631| v2631_1(void) = NoOp : +# 2618| v2618_9(void) = ReturnVoid : +# 2618| v2618_10(void) = AliasedUse : ~m2630_8 +# 2618| v2618_11(void) = ExitFunction : + +# 2639| void needs_chi_for_initialize_groups() +# 2639| Block 0 +# 2639| v2639_1(void) = EnterFunction : +# 2639| m2639_2(unknown) = AliasedDefinition : +# 2639| m2639_3(unknown) = InitializeNonLocal : +# 2639| m2639_4(unknown) = Chi : total:m2639_2, partial:m2639_3 +# 2639| m2639_5(unknown) = UninitializedGroup : +# 2639| m2639_6(unknown) = Chi : total:m2639_4, partial:m2639_5 +# 2639| m2639_7(unknown) = UninitializedGroup : +# 2639| m2639_8(unknown) = Chi : total:m2639_6, partial:m2639_7 +# 2641| r2641_1(glval) = FunctionAddress[predicateA] : +# 2641| r2641_2(bool) = Call[predicateA] : func:r2641_1 +# 2641| m2641_3(unknown) = ^CallSideEffect : ~m2639_8 +# 2641| m2641_4(unknown) = Chi : total:m2639_8, partial:m2641_3 +# 2641| v2641_5(void) = ConditionalBranch : r2641_2 +#-----| False -> Block 4 +#-----| True -> Block 1 + +# 2643| Block 1 +# 2643| r2643_1(glval) = VariableAddress[data] : +# 2643| r2643_2(glval) = FunctionAddress[malloc] : +# 2643| r2643_3(unsigned long) = Constant[100] : +# 2643| r2643_4(void *) = Call[malloc] : func:r2643_2, 0:r2643_3 +# 2643| m2643_5(unknown) = ^CallSideEffect : ~m2641_4 +# 2643| m2643_6(unknown) = Chi : total:m2641_4, partial:m2643_5 +# 2643| m2643_7(unknown) = ^InitializeDynamicAllocation : &:r2643_4 +# 2643| m2643_8(unknown) = Chi : total:m2643_6, partial:m2643_7 +# 2643| r2643_9(long long *) = Convert : r2643_4 +# 2643| m2643_10(long long *) = Store[data] : &:r2643_1, r2643_9 +# 2644| r2644_1(glval) = VariableAddress[data] : +# 2644| r2644_2(long long *) = Load[data] : &:r2644_1, m2643_10 +# 2644| r2644_3(void *) = Convert : r2644_2 +# 2644| r2644_4(void *) = Constant[0] : +# 2644| r2644_5(bool) = CompareNE : r2644_3, r2644_4 +# 2644| v2644_6(void) = ConditionalBranch : r2644_5 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2646| Block 2 +# 2646| r2646_1(glval) = FunctionAddress[malloc] : +# 2646| r2646_2(unsigned long) = Constant[100] : +# 2646| r2646_3(void *) = Call[malloc] : func:r2646_1, 0:r2646_2 +# 2646| m2646_4(unknown) = ^CallSideEffect : ~m2643_8 +# 2646| m2646_5(unknown) = Chi : total:m2643_8, partial:m2646_4 +# 2646| m2646_6(unknown) = ^InitializeDynamicAllocation : &:r2646_3 +# 2646| m2646_7(unknown) = Chi : total:m2646_5, partial:m2646_6 +# 2646| r2646_8(long long *) = Convert : r2646_3 +# 2646| r2646_9(glval) = VariableAddress[data] : +# 2646| m2646_10(long long *) = Store[data] : &:r2646_9, r2646_8 +#-----| Goto -> Block 3 + +# 2648| Block 3 +# 2648| m2648_1(unknown) = Phi : from 1:~m2643_8, from 2:~m2646_7 +# 2648| m2648_2(long long *) = Phi : from 1:m2643_10, from 2:m2646_10 +# 2648| r2648_3(glval) = FunctionAddress[use_const_void_pointer] : +# 2648| r2648_4(glval) = VariableAddress[data] : +# 2648| r2648_5(long long *) = Load[data] : &:r2648_4, m2648_2 +# 2648| r2648_6(void *) = Convert : r2648_5 +# 2648| v2648_7(void) = Call[use_const_void_pointer] : func:r2648_3, 0:r2648_6 +# 2648| m2648_8(unknown) = ^CallSideEffect : ~m2648_1 +# 2648| m2648_9(unknown) = Chi : total:m2648_1, partial:m2648_8 +# 2648| v2648_10(void) = ^BufferReadSideEffect[0] : &:r2648_6, ~m2648_9 +#-----| Goto -> Block 7 + +# 2652| Block 4 +# 2652| r2652_1(glval) = VariableAddress[data] : +# 2652| r2652_2(glval) = FunctionAddress[malloc] : +# 2652| r2652_3(unsigned long) = Constant[100] : +# 2652| r2652_4(void *) = Call[malloc] : func:r2652_2, 0:r2652_3 +# 2652| m2652_5(unknown) = ^CallSideEffect : ~m2641_4 +# 2652| m2652_6(unknown) = Chi : total:m2641_4, partial:m2652_5 +# 2652| m2652_7(unknown) = ^InitializeDynamicAllocation : &:r2652_4 +# 2652| m2652_8(unknown) = Chi : total:m2652_6, partial:m2652_7 +# 2652| r2652_9(long long *) = Convert : r2652_4 +# 2652| m2652_10(long long *) = Store[data] : &:r2652_1, r2652_9 +# 2653| r2653_1(glval) = VariableAddress[data] : +# 2653| r2653_2(long long *) = Load[data] : &:r2653_1, m2652_10 +# 2653| r2653_3(void *) = Convert : r2653_2 +# 2653| r2653_4(void *) = Constant[0] : +# 2653| r2653_5(bool) = CompareNE : r2653_3, r2653_4 +# 2653| v2653_6(void) = ConditionalBranch : r2653_5 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2655| Block 5 +# 2655| r2655_1(glval) = FunctionAddress[malloc] : +# 2655| r2655_2(unsigned long) = Constant[200] : +# 2655| r2655_3(void *) = Call[malloc] : func:r2655_1, 0:r2655_2 +# 2655| m2655_4(unknown) = ^CallSideEffect : ~m2652_8 +# 2655| m2655_5(unknown) = Chi : total:m2652_8, partial:m2655_4 +# 2655| m2655_6(unknown) = ^InitializeDynamicAllocation : &:r2655_3 +# 2655| m2655_7(unknown) = Chi : total:m2655_5, partial:m2655_6 +# 2655| r2655_8(long long *) = Convert : r2655_3 +# 2655| r2655_9(glval) = VariableAddress[data] : +# 2655| m2655_10(long long *) = Store[data] : &:r2655_9, r2655_8 +#-----| Goto -> Block 6 + +# 2657| Block 6 +# 2657| m2657_1(unknown) = Phi : from 4:~m2652_8, from 5:~m2655_7 +# 2657| m2657_2(long long *) = Phi : from 4:m2652_10, from 5:m2655_10 +# 2657| r2657_3(glval) = FunctionAddress[use_const_void_pointer] : +# 2657| r2657_4(glval) = VariableAddress[data] : +# 2657| r2657_5(long long *) = Load[data] : &:r2657_4, m2657_2 +# 2657| r2657_6(void *) = Convert : r2657_5 +# 2657| v2657_7(void) = Call[use_const_void_pointer] : func:r2657_3, 0:r2657_6 +# 2657| m2657_8(unknown) = ^CallSideEffect : ~m2657_1 +# 2657| m2657_9(unknown) = Chi : total:m2657_1, partial:m2657_8 +# 2657| v2657_10(void) = ^BufferReadSideEffect[0] : &:r2657_6, ~m2657_9 +#-----| Goto -> Block 7 + +# 2659| Block 7 +# 2659| m2659_1(unknown) = Phi : from 3:~m2648_9, from 6:~m2657_9 +# 2659| v2659_2(void) = NoOp : +# 2639| v2639_9(void) = ReturnVoid : +# 2639| v2639_10(void) = AliasedUse : ~m2659_1 +# 2639| v2639_11(void) = ExitFunction : + +# 2663| void phi_with_single_input_at_merge(bool) +# 2663| Block 0 +# 2663| v2663_1(void) = EnterFunction : +# 2663| m2663_2(unknown) = AliasedDefinition : +# 2663| m2663_3(unknown) = InitializeNonLocal : +# 2663| m2663_4(unknown) = Chi : total:m2663_2, partial:m2663_3 +# 2663| r2663_5(glval) = VariableAddress[b] : +# 2663| m2663_6(bool) = InitializeParameter[b] : &:r2663_5 +# 2665| r2665_1(glval) = VariableAddress[data] : +# 2665| r2665_2(int *) = Constant[0] : +# 2665| m2665_3(int *) = Store[data] : &:r2665_1, r2665_2 +# 2666| r2666_1(glval) = VariableAddress[b] : +# 2666| r2666_2(bool) = Load[b] : &:r2666_1, m2663_6 +# 2666| v2666_3(void) = ConditionalBranch : r2666_2 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2667| Block 1 +# 2667| r2667_1(glval) = VariableAddress[intBuffer] : +# 2667| r2667_2(int) = Constant[8] : +# 2667| m2667_3(int) = Store[intBuffer] : &:r2667_1, r2667_2 +# 2668| r2668_1(glval) = VariableAddress[intBuffer] : +# 2668| r2668_2(int *) = CopyValue : r2668_1 +# 2668| r2668_3(glval) = VariableAddress[data] : +# 2668| m2668_4(int *) = Store[data] : &:r2668_3, r2668_2 +#-----| Goto -> Block 2 + +# 2670| Block 2 +# 2670| m2670_1(int) = Phi : from 1:m2667_3 +# 2670| m2670_2(int *) = Phi : from 0:m2665_3, from 1:m2668_4 +# 2670| r2670_3(glval) = FunctionAddress[use_int] : +# 2670| r2670_4(glval) = VariableAddress[data] : +# 2670| r2670_5(int *) = Load[data] : &:r2670_4, m2670_2 +# 2670| r2670_6(int) = Load[?] : &:r2670_5, ~m2670_1 +# 2670| v2670_7(void) = Call[use_int] : func:r2670_3, 0:r2670_6 +# 2670| m2670_8(unknown) = ^CallSideEffect : ~m2663_4 +# 2670| m2670_9(unknown) = Chi : total:m2663_4, partial:m2670_8 +# 2671| v2671_1(void) = NoOp : +# 2663| v2663_7(void) = ReturnVoid : +# 2663| v2663_8(void) = AliasedUse : ~m2670_9 +# 2663| v2663_9(void) = ExitFunction : + +# 2684| void test(bool) +# 2684| Block 0 +# 2684| v2684_1(void) = EnterFunction : +# 2684| m2684_2(unknown) = AliasedDefinition : +# 2684| m2684_3(unknown) = InitializeNonLocal : +# 2684| m2684_4(unknown) = Chi : total:m2684_2, partial:m2684_3 +# 2684| m2684_5(unknown) = UninitializedGroup[#string2686:22,#string2686:27] : +# 2684| m2684_6(unknown) = Chi : total:m2684_4, partial:m2684_5 +# 2684| m2684_7(unknown) = UninitializedGroup[#string2686:22,#string2686:27] : +# 2684| m2684_8(unknown) = Chi : total:m2684_6, partial:m2684_7 +# 2684| r2684_9(glval) = VariableAddress[b] : +# 2684| m2684_10(bool) = InitializeParameter[b] : &:r2684_9 +# 2686| r2686_1(glval) = FunctionAddress[use] : +# 2686| r2686_2(glval) = VariableAddress[b] : +# 2686| r2686_3(bool) = Load[b] : &:r2686_2, m2684_10 +# 2686| v2686_4(void) = ConditionalBranch : r2686_3 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2686| Block 1 +# 2686| m2686_5(char *) = Phi : from 2:m2686_19, from 3:m2686_23 +# 2686| r2686_6(glval) = VariableAddress[#temp2686:18] : +# 2686| r2686_7(char *) = Load[#temp2686:18] : &:r2686_6, m2686_5 +# 2686| v2686_8(void) = Call[use] : func:r2686_1, 0:r2686_7 +# 2686| m2686_9(unknown) = ^CallSideEffect : ~m2684_8 +# 2686| m2686_10(unknown) = Chi : total:m2684_8, partial:m2686_9 +# 2686| v2686_11(void) = ^BufferReadSideEffect[0] : &:r2686_7, ~m2686_10 +# 2686| r2686_12(glval) = FunctionAddress[use] : +# 2686| r2686_13(glval) = VariableAddress[b] : +# 2686| r2686_14(bool) = Load[b] : &:r2686_13, m2684_10 +# 2686| v2686_15(void) = ConditionalBranch : r2686_14 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2686| Block 2 +# 2686| r2686_16(glval) = StringConstant[] : +# 2686| r2686_17(char *) = Convert : r2686_16 +# 2686| r2686_18(glval) = VariableAddress[#temp2686:18] : +# 2686| m2686_19(char *) = Store[#temp2686:18] : &:r2686_18, r2686_17 +#-----| Goto -> Block 1 + +# 2686| Block 3 +# 2686| r2686_20(glval) = StringConstant[] : +# 2686| r2686_21(char *) = Convert : r2686_20 +# 2686| r2686_22(glval) = VariableAddress[#temp2686:18] : +# 2686| m2686_23(char *) = Store[#temp2686:18] : &:r2686_22, r2686_21 +#-----| Goto -> Block 1 + +# 2686| Block 4 +# 2686| m2686_24(char *) = Phi : from 5:m2686_36, from 6:m2686_40 +# 2686| r2686_25(glval) = VariableAddress[#temp2686:18] : +# 2686| r2686_26(char *) = Load[#temp2686:18] : &:r2686_25, m2686_24 +# 2686| v2686_27(void) = Call[use] : func:r2686_12, 0:r2686_26 +# 2686| m2686_28(unknown) = ^CallSideEffect : ~m2686_10 +# 2686| m2686_29(unknown) = Chi : total:m2686_10, partial:m2686_28 +# 2686| v2686_30(void) = ^BufferReadSideEffect[0] : &:r2686_26, ~m2686_29 +# 2686| r2686_31(bool) = Constant[0] : +# 2686| v2686_32(void) = ConditionalBranch : r2686_31 +#-----| False -> Block 7 +#-----| True -> Block 8 + +# 2686| Block 5 +# 2686| r2686_33(glval) = StringConstant[] : +# 2686| r2686_34(char *) = Convert : r2686_33 +# 2686| r2686_35(glval) = VariableAddress[#temp2686:18] : +# 2686| m2686_36(char *) = Store[#temp2686:18] : &:r2686_35, r2686_34 +#-----| Goto -> Block 4 + +# 2686| Block 6 +# 2686| r2686_37(glval) = StringConstant[] : +# 2686| r2686_38(char *) = Convert : r2686_37 +# 2686| r2686_39(glval) = VariableAddress[#temp2686:18] : +# 2686| m2686_40(char *) = Store[#temp2686:18] : &:r2686_39, r2686_38 +#-----| Goto -> Block 4 + +# 2687| Block 7 +# 2687| v2687_1(void) = NoOp : +# 2684| v2684_11(void) = ReturnVoid : +# 2684| v2684_12(void) = AliasedUse : ~m2686_29 +# 2684| v2684_13(void) = ExitFunction : + +# 2684| Block 8 +# 2684| v2684_14(void) = Unreached : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index 5a0234a4cc42..17a11819e03c 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -2,6 +2,7 @@ missingOperand unexpectedOperand duplicateOperand missingPhiOperand +| ir.cpp:2670:3:2670:9 | Phi: call to use_int | Instruction 'Phi: call to use_int' is missing an operand for predecessor block 'EnterFunction: phi_with_single_input_at_merge' in function '$@'. | ir.cpp:2663:13:2663:42 | void phi_with_single_input_at_merge(bool) | void phi_with_single_input_at_merge(bool) | missingOperandType duplicateChiOperand sideEffectWithoutPrimary diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index 5a0234a4cc42..17a11819e03c 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -2,6 +2,7 @@ missingOperand unexpectedOperand duplicateOperand missingPhiOperand +| ir.cpp:2670:3:2670:9 | Phi: call to use_int | Instruction 'Phi: call to use_int' is missing an operand for predecessor block 'EnterFunction: phi_with_single_input_at_merge' in function '$@'. | ir.cpp:2663:13:2663:42 | void phi_with_single_input_at_merge(bool) | void phi_with_single_input_at_merge(bool) | missingOperandType duplicateChiOperand sideEffectWithoutPrimary diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 67a252efad94..f8e163685373 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2556,4 +2556,134 @@ void builtin_bitcast(unsigned long ul) { double d = __builtin_bit_cast(double, ul); } +void p_points_to_x_or_y(int a, int b) { + int x; + int y; + int* p; + if (a < b) { + p = &x; + } else { + p = &y; + } + *p = 5; + int z = x; + int w = y; +} + +int phi_after_while() { + int r; + int *rP = &r; + + while(predicateA()) { + int s = 0; + *rP = s; + rP = &s; + } + + return r; +} + +// This testcase will loop infinitely if the analysis attempts to propagate +// phi inputs with a non-unknown bit offset. +char *recursive_conditional_call_with_increment(char *d, bool b) +{ + if (b) { + d = recursive_conditional_call_with_increment(d, b); + } + d++; + return d; +} + +struct Recursive +{ + Recursive *next; +}; + +static Recursive *merge(Recursive *a) +{ + Recursive *b; + Recursive **p = &b; + + while (predicateA()) + { + *p = a; + p = &a->next; + } + + return b; +} + +void use_const_int(const int*); + +void escaping_pointer(bool b) +{ + int *data; + int l1, l2; + if (b) + { + data = &l1; + } + else + { + data = &l2; + } + use_const_int(data); +} + +using int64_t = long long; +#define NULL ((void *)0) + +void *malloc(unsigned long); +void use_const_void_pointer(const void *); + +static void needs_chi_for_initialize_groups() +{ + if (predicateA()) + { + int64_t *data = (int64_t *)malloc(100); + if (data != NULL) + { + data = (int64_t *)malloc(100); + } + use_const_void_pointer(data); + } + else + { + int64_t *data = (int64_t *)malloc(100); + if (data != NULL) + { + data = (int64_t *)malloc(200); + } + use_const_void_pointer(data); + } +} + +void use_int(int); + +static void phi_with_single_input_at_merge(bool b) +{ + int *data = nullptr; + if(b) { + int intBuffer = 8; + data = &intBuffer; + } + use_int(*data); +} + +void use(const char *fmt); + +#define call_use(format) use(format) + +#define twice_call_use(format) \ + do \ + { \ + call_use(format); \ + call_use(format); \ + } while (0) + +void test(bool b) +{ + twice_call_use(b ? "" : ""); +} + // semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 76bea510ea0e..75e2cb4a67c0 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -16734,6 +16734,463 @@ ir.cpp: # 2555| v2555_7(void) = AliasedUse : ~m? # 2555| v2555_8(void) = ExitFunction : +# 2559| void p_points_to_x_or_y(int, int) +# 2559| Block 0 +# 2559| v2559_1(void) = EnterFunction : +# 2559| mu2559_2(unknown) = AliasedDefinition : +# 2559| mu2559_3(unknown) = InitializeNonLocal : +# 2559| r2559_4(glval) = VariableAddress[a] : +# 2559| mu2559_5(int) = InitializeParameter[a] : &:r2559_4 +# 2559| r2559_6(glval) = VariableAddress[b] : +# 2559| mu2559_7(int) = InitializeParameter[b] : &:r2559_6 +# 2560| r2560_1(glval) = VariableAddress[x] : +# 2560| mu2560_2(int) = Uninitialized[x] : &:r2560_1 +# 2561| r2561_1(glval) = VariableAddress[y] : +# 2561| mu2561_2(int) = Uninitialized[y] : &:r2561_1 +# 2562| r2562_1(glval) = VariableAddress[p] : +# 2562| mu2562_2(int *) = Uninitialized[p] : &:r2562_1 +# 2563| r2563_1(glval) = VariableAddress[a] : +# 2563| r2563_2(int) = Load[a] : &:r2563_1, ~m? +# 2563| r2563_3(glval) = VariableAddress[b] : +# 2563| r2563_4(int) = Load[b] : &:r2563_3, ~m? +# 2563| r2563_5(bool) = CompareLT : r2563_2, r2563_4 +# 2563| v2563_6(void) = ConditionalBranch : r2563_5 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2564| Block 1 +# 2564| r2564_1(glval) = VariableAddress[x] : +# 2564| r2564_2(int *) = CopyValue : r2564_1 +# 2564| r2564_3(glval) = VariableAddress[p] : +# 2564| mu2564_4(int *) = Store[p] : &:r2564_3, r2564_2 +#-----| Goto -> Block 3 + +# 2566| Block 2 +# 2566| r2566_1(glval) = VariableAddress[y] : +# 2566| r2566_2(int *) = CopyValue : r2566_1 +# 2566| r2566_3(glval) = VariableAddress[p] : +# 2566| mu2566_4(int *) = Store[p] : &:r2566_3, r2566_2 +#-----| Goto -> Block 3 + +# 2568| Block 3 +# 2568| r2568_1(int) = Constant[5] : +# 2568| r2568_2(glval) = VariableAddress[p] : +# 2568| r2568_3(int *) = Load[p] : &:r2568_2, ~m? +# 2568| r2568_4(glval) = CopyValue : r2568_3 +# 2568| mu2568_5(int) = Store[?] : &:r2568_4, r2568_1 +# 2569| r2569_1(glval) = VariableAddress[z] : +# 2569| r2569_2(glval) = VariableAddress[x] : +# 2569| r2569_3(int) = Load[x] : &:r2569_2, ~m? +# 2569| mu2569_4(int) = Store[z] : &:r2569_1, r2569_3 +# 2570| r2570_1(glval) = VariableAddress[w] : +# 2570| r2570_2(glval) = VariableAddress[y] : +# 2570| r2570_3(int) = Load[y] : &:r2570_2, ~m? +# 2570| mu2570_4(int) = Store[w] : &:r2570_1, r2570_3 +# 2571| v2571_1(void) = NoOp : +# 2559| v2559_8(void) = ReturnVoid : +# 2559| v2559_9(void) = AliasedUse : ~m? +# 2559| v2559_10(void) = ExitFunction : + +# 2573| int phi_after_while() +# 2573| Block 0 +# 2573| v2573_1(void) = EnterFunction : +# 2573| mu2573_2(unknown) = AliasedDefinition : +# 2573| mu2573_3(unknown) = InitializeNonLocal : +# 2574| r2574_1(glval) = VariableAddress[r] : +# 2574| mu2574_2(int) = Uninitialized[r] : &:r2574_1 +# 2575| r2575_1(glval) = VariableAddress[rP] : +# 2575| r2575_2(glval) = VariableAddress[r] : +# 2575| r2575_3(int *) = CopyValue : r2575_2 +# 2575| mu2575_4(int *) = Store[rP] : &:r2575_1, r2575_3 +#-----| Goto -> Block 1 + +# 2577| Block 1 +# 2577| r2577_1(glval) = FunctionAddress[predicateA] : +# 2577| r2577_2(bool) = Call[predicateA] : func:r2577_1 +# 2577| mu2577_3(unknown) = ^CallSideEffect : ~m? +# 2577| v2577_4(void) = ConditionalBranch : r2577_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2578| Block 2 +# 2578| r2578_1(glval) = VariableAddress[s] : +# 2578| r2578_2(int) = Constant[0] : +# 2578| mu2578_3(int) = Store[s] : &:r2578_1, r2578_2 +# 2579| r2579_1(glval) = VariableAddress[s] : +# 2579| r2579_2(int) = Load[s] : &:r2579_1, ~m? +# 2579| r2579_3(glval) = VariableAddress[rP] : +# 2579| r2579_4(int *) = Load[rP] : &:r2579_3, ~m? +# 2579| r2579_5(glval) = CopyValue : r2579_4 +# 2579| mu2579_6(int) = Store[?] : &:r2579_5, r2579_2 +# 2580| r2580_1(glval) = VariableAddress[s] : +# 2580| r2580_2(int *) = CopyValue : r2580_1 +# 2580| r2580_3(glval) = VariableAddress[rP] : +# 2580| mu2580_4(int *) = Store[rP] : &:r2580_3, r2580_2 +#-----| Goto (back edge) -> Block 1 + +# 2583| Block 3 +# 2583| r2583_1(glval) = VariableAddress[#return] : +# 2583| r2583_2(glval) = VariableAddress[r] : +# 2583| r2583_3(int) = Load[r] : &:r2583_2, ~m? +# 2583| mu2583_4(int) = Store[#return] : &:r2583_1, r2583_3 +# 2573| r2573_4(glval) = VariableAddress[#return] : +# 2573| v2573_5(void) = ReturnValue : &:r2573_4, ~m? +# 2573| v2573_6(void) = AliasedUse : ~m? +# 2573| v2573_7(void) = ExitFunction : + +# 2588| char* recursive_conditional_call_with_increment(char*, bool) +# 2588| Block 0 +# 2588| v2588_1(void) = EnterFunction : +# 2588| mu2588_2(unknown) = AliasedDefinition : +# 2588| mu2588_3(unknown) = InitializeNonLocal : +# 2588| r2588_4(glval) = VariableAddress[d] : +# 2588| mu2588_5(char *) = InitializeParameter[d] : &:r2588_4 +# 2588| r2588_6(char *) = Load[d] : &:r2588_4, ~m? +# 2588| mu2588_7(unknown) = InitializeIndirection[d] : &:r2588_6 +# 2588| r2588_8(glval) = VariableAddress[b] : +# 2588| mu2588_9(bool) = InitializeParameter[b] : &:r2588_8 +# 2590| r2590_1(glval) = VariableAddress[b] : +# 2590| r2590_2(bool) = Load[b] : &:r2590_1, ~m? +# 2590| v2590_3(void) = ConditionalBranch : r2590_2 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2591| Block 1 +# 2591| r2591_1(glval) = FunctionAddress[recursive_conditional_call_with_increment] : +# 2591| r2591_2(glval) = VariableAddress[d] : +# 2591| r2591_3(char *) = Load[d] : &:r2591_2, ~m? +# 2591| r2591_4(glval) = VariableAddress[b] : +# 2591| r2591_5(bool) = Load[b] : &:r2591_4, ~m? +# 2591| r2591_6(char *) = Call[recursive_conditional_call_with_increment] : func:r2591_1, 0:r2591_3, 1:r2591_5 +# 2591| mu2591_7(unknown) = ^CallSideEffect : ~m? +# 2591| v2591_8(void) = ^BufferReadSideEffect[0] : &:r2591_3, ~m? +# 2591| mu2591_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2591_3 +# 2591| r2591_10(glval) = VariableAddress[d] : +# 2591| mu2591_11(char *) = Store[d] : &:r2591_10, r2591_6 +#-----| Goto -> Block 2 + +# 2593| Block 2 +# 2593| r2593_1(glval) = VariableAddress[d] : +# 2593| r2593_2(char *) = Load[d] : &:r2593_1, ~m? +# 2593| r2593_3(int) = Constant[1] : +# 2593| r2593_4(char *) = PointerAdd[1] : r2593_2, r2593_3 +# 2593| mu2593_5(char *) = Store[d] : &:r2593_1, r2593_4 +# 2594| r2594_1(glval) = VariableAddress[#return] : +# 2594| r2594_2(glval) = VariableAddress[d] : +# 2594| r2594_3(char *) = Load[d] : &:r2594_2, ~m? +# 2594| mu2594_4(char *) = Store[#return] : &:r2594_1, r2594_3 +# 2588| v2588_10(void) = ReturnIndirection[d] : &:r2588_6, ~m? +# 2588| r2588_11(glval) = VariableAddress[#return] : +# 2588| v2588_12(void) = ReturnValue : &:r2588_11, ~m? +# 2588| v2588_13(void) = AliasedUse : ~m? +# 2588| v2588_14(void) = ExitFunction : + +# 2602| Recursive* merge(Recursive*) +# 2602| Block 0 +# 2602| v2602_1(void) = EnterFunction : +# 2602| mu2602_2(unknown) = AliasedDefinition : +# 2602| mu2602_3(unknown) = InitializeNonLocal : +# 2602| r2602_4(glval) = VariableAddress[a] : +# 2602| mu2602_5(Recursive *) = InitializeParameter[a] : &:r2602_4 +# 2602| r2602_6(Recursive *) = Load[a] : &:r2602_4, ~m? +# 2602| mu2602_7(unknown) = InitializeIndirection[a] : &:r2602_6 +# 2604| r2604_1(glval) = VariableAddress[b] : +# 2604| mu2604_2(Recursive *) = Uninitialized[b] : &:r2604_1 +# 2605| r2605_1(glval) = VariableAddress[p] : +# 2605| r2605_2(glval) = VariableAddress[b] : +# 2605| r2605_3(Recursive **) = CopyValue : r2605_2 +# 2605| mu2605_4(Recursive **) = Store[p] : &:r2605_1, r2605_3 +#-----| Goto -> Block 1 + +# 2607| Block 1 +# 2607| r2607_1(glval) = FunctionAddress[predicateA] : +# 2607| r2607_2(bool) = Call[predicateA] : func:r2607_1 +# 2607| mu2607_3(unknown) = ^CallSideEffect : ~m? +# 2607| v2607_4(void) = ConditionalBranch : r2607_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2609| Block 2 +# 2609| r2609_1(glval) = VariableAddress[a] : +# 2609| r2609_2(Recursive *) = Load[a] : &:r2609_1, ~m? +# 2609| r2609_3(glval) = VariableAddress[p] : +# 2609| r2609_4(Recursive **) = Load[p] : &:r2609_3, ~m? +# 2609| r2609_5(glval) = CopyValue : r2609_4 +# 2609| mu2609_6(Recursive *) = Store[?] : &:r2609_5, r2609_2 +# 2610| r2610_1(glval) = VariableAddress[a] : +# 2610| r2610_2(Recursive *) = Load[a] : &:r2610_1, ~m? +# 2610| r2610_3(glval) = FieldAddress[next] : r2610_2 +# 2610| r2610_4(Recursive **) = CopyValue : r2610_3 +# 2610| r2610_5(glval) = VariableAddress[p] : +# 2610| mu2610_6(Recursive **) = Store[p] : &:r2610_5, r2610_4 +#-----| Goto (back edge) -> Block 1 + +# 2613| Block 3 +# 2613| r2613_1(glval) = VariableAddress[#return] : +# 2613| r2613_2(glval) = VariableAddress[b] : +# 2613| r2613_3(Recursive *) = Load[b] : &:r2613_2, ~m? +# 2613| mu2613_4(Recursive *) = Store[#return] : &:r2613_1, r2613_3 +# 2602| v2602_8(void) = ReturnIndirection[a] : &:r2602_6, ~m? +# 2602| r2602_9(glval) = VariableAddress[#return] : +# 2602| v2602_10(void) = ReturnValue : &:r2602_9, ~m? +# 2602| v2602_11(void) = AliasedUse : ~m? +# 2602| v2602_12(void) = ExitFunction : + +# 2618| void escaping_pointer(bool) +# 2618| Block 0 +# 2618| v2618_1(void) = EnterFunction : +# 2618| mu2618_2(unknown) = AliasedDefinition : +# 2618| mu2618_3(unknown) = InitializeNonLocal : +# 2618| r2618_4(glval) = VariableAddress[b] : +# 2618| mu2618_5(bool) = InitializeParameter[b] : &:r2618_4 +# 2620| r2620_1(glval) = VariableAddress[data] : +# 2620| mu2620_2(int *) = Uninitialized[data] : &:r2620_1 +# 2621| r2621_1(glval) = VariableAddress[l1] : +# 2621| mu2621_2(int) = Uninitialized[l1] : &:r2621_1 +# 2621| r2621_3(glval) = VariableAddress[l2] : +# 2621| mu2621_4(int) = Uninitialized[l2] : &:r2621_3 +# 2622| r2622_1(glval) = VariableAddress[b] : +# 2622| r2622_2(bool) = Load[b] : &:r2622_1, ~m? +# 2622| v2622_3(void) = ConditionalBranch : r2622_2 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2624| Block 1 +# 2624| r2624_1(glval) = VariableAddress[l1] : +# 2624| r2624_2(int *) = CopyValue : r2624_1 +# 2624| r2624_3(glval) = VariableAddress[data] : +# 2624| mu2624_4(int *) = Store[data] : &:r2624_3, r2624_2 +#-----| Goto -> Block 3 + +# 2628| Block 2 +# 2628| r2628_1(glval) = VariableAddress[l2] : +# 2628| r2628_2(int *) = CopyValue : r2628_1 +# 2628| r2628_3(glval) = VariableAddress[data] : +# 2628| mu2628_4(int *) = Store[data] : &:r2628_3, r2628_2 +#-----| Goto -> Block 3 + +# 2630| Block 3 +# 2630| r2630_1(glval) = FunctionAddress[use_const_int] : +# 2630| r2630_2(glval) = VariableAddress[data] : +# 2630| r2630_3(int *) = Load[data] : &:r2630_2, ~m? +# 2630| r2630_4(int *) = Convert : r2630_3 +# 2630| v2630_5(void) = Call[use_const_int] : func:r2630_1, 0:r2630_4 +# 2630| mu2630_6(unknown) = ^CallSideEffect : ~m? +# 2630| v2630_7(void) = ^BufferReadSideEffect[0] : &:r2630_4, ~m? +# 2631| v2631_1(void) = NoOp : +# 2618| v2618_6(void) = ReturnVoid : +# 2618| v2618_7(void) = AliasedUse : ~m? +# 2618| v2618_8(void) = ExitFunction : + +# 2639| void needs_chi_for_initialize_groups() +# 2639| Block 0 +# 2639| v2639_1(void) = EnterFunction : +# 2639| mu2639_2(unknown) = AliasedDefinition : +# 2639| mu2639_3(unknown) = InitializeNonLocal : +# 2641| r2641_1(glval) = FunctionAddress[predicateA] : +# 2641| r2641_2(bool) = Call[predicateA] : func:r2641_1 +# 2641| mu2641_3(unknown) = ^CallSideEffect : ~m? +# 2641| v2641_4(void) = ConditionalBranch : r2641_2 +#-----| False -> Block 4 +#-----| True -> Block 1 + +# 2643| Block 1 +# 2643| r2643_1(glval) = VariableAddress[data] : +# 2643| r2643_2(glval) = FunctionAddress[malloc] : +# 2643| r2643_3(unsigned long) = Constant[100] : +# 2643| r2643_4(void *) = Call[malloc] : func:r2643_2, 0:r2643_3 +# 2643| mu2643_5(unknown) = ^CallSideEffect : ~m? +# 2643| mu2643_6(unknown) = ^InitializeDynamicAllocation : &:r2643_4 +# 2643| r2643_7(long long *) = Convert : r2643_4 +# 2643| mu2643_8(long long *) = Store[data] : &:r2643_1, r2643_7 +# 2644| r2644_1(glval) = VariableAddress[data] : +# 2644| r2644_2(long long *) = Load[data] : &:r2644_1, ~m? +# 2644| r2644_3(void *) = Convert : r2644_2 +# 2644| r2644_4(void *) = Constant[0] : +# 2644| r2644_5(bool) = CompareNE : r2644_3, r2644_4 +# 2644| v2644_6(void) = ConditionalBranch : r2644_5 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2646| Block 2 +# 2646| r2646_1(glval) = FunctionAddress[malloc] : +# 2646| r2646_2(unsigned long) = Constant[100] : +# 2646| r2646_3(void *) = Call[malloc] : func:r2646_1, 0:r2646_2 +# 2646| mu2646_4(unknown) = ^CallSideEffect : ~m? +# 2646| mu2646_5(unknown) = ^InitializeDynamicAllocation : &:r2646_3 +# 2646| r2646_6(long long *) = Convert : r2646_3 +# 2646| r2646_7(glval) = VariableAddress[data] : +# 2646| mu2646_8(long long *) = Store[data] : &:r2646_7, r2646_6 +#-----| Goto -> Block 3 + +# 2648| Block 3 +# 2648| r2648_1(glval) = FunctionAddress[use_const_void_pointer] : +# 2648| r2648_2(glval) = VariableAddress[data] : +# 2648| r2648_3(long long *) = Load[data] : &:r2648_2, ~m? +# 2648| r2648_4(void *) = Convert : r2648_3 +# 2648| v2648_5(void) = Call[use_const_void_pointer] : func:r2648_1, 0:r2648_4 +# 2648| mu2648_6(unknown) = ^CallSideEffect : ~m? +# 2648| v2648_7(void) = ^BufferReadSideEffect[0] : &:r2648_4, ~m? +#-----| Goto -> Block 7 + +# 2652| Block 4 +# 2652| r2652_1(glval) = VariableAddress[data] : +# 2652| r2652_2(glval) = FunctionAddress[malloc] : +# 2652| r2652_3(unsigned long) = Constant[100] : +# 2652| r2652_4(void *) = Call[malloc] : func:r2652_2, 0:r2652_3 +# 2652| mu2652_5(unknown) = ^CallSideEffect : ~m? +# 2652| mu2652_6(unknown) = ^InitializeDynamicAllocation : &:r2652_4 +# 2652| r2652_7(long long *) = Convert : r2652_4 +# 2652| mu2652_8(long long *) = Store[data] : &:r2652_1, r2652_7 +# 2653| r2653_1(glval) = VariableAddress[data] : +# 2653| r2653_2(long long *) = Load[data] : &:r2653_1, ~m? +# 2653| r2653_3(void *) = Convert : r2653_2 +# 2653| r2653_4(void *) = Constant[0] : +# 2653| r2653_5(bool) = CompareNE : r2653_3, r2653_4 +# 2653| v2653_6(void) = ConditionalBranch : r2653_5 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2655| Block 5 +# 2655| r2655_1(glval) = FunctionAddress[malloc] : +# 2655| r2655_2(unsigned long) = Constant[200] : +# 2655| r2655_3(void *) = Call[malloc] : func:r2655_1, 0:r2655_2 +# 2655| mu2655_4(unknown) = ^CallSideEffect : ~m? +# 2655| mu2655_5(unknown) = ^InitializeDynamicAllocation : &:r2655_3 +# 2655| r2655_6(long long *) = Convert : r2655_3 +# 2655| r2655_7(glval) = VariableAddress[data] : +# 2655| mu2655_8(long long *) = Store[data] : &:r2655_7, r2655_6 +#-----| Goto -> Block 6 + +# 2657| Block 6 +# 2657| r2657_1(glval) = FunctionAddress[use_const_void_pointer] : +# 2657| r2657_2(glval) = VariableAddress[data] : +# 2657| r2657_3(long long *) = Load[data] : &:r2657_2, ~m? +# 2657| r2657_4(void *) = Convert : r2657_3 +# 2657| v2657_5(void) = Call[use_const_void_pointer] : func:r2657_1, 0:r2657_4 +# 2657| mu2657_6(unknown) = ^CallSideEffect : ~m? +# 2657| v2657_7(void) = ^BufferReadSideEffect[0] : &:r2657_4, ~m? +#-----| Goto -> Block 7 + +# 2659| Block 7 +# 2659| v2659_1(void) = NoOp : +# 2639| v2639_4(void) = ReturnVoid : +# 2639| v2639_5(void) = AliasedUse : ~m? +# 2639| v2639_6(void) = ExitFunction : + +# 2663| void phi_with_single_input_at_merge(bool) +# 2663| Block 0 +# 2663| v2663_1(void) = EnterFunction : +# 2663| mu2663_2(unknown) = AliasedDefinition : +# 2663| mu2663_3(unknown) = InitializeNonLocal : +# 2663| r2663_4(glval) = VariableAddress[b] : +# 2663| mu2663_5(bool) = InitializeParameter[b] : &:r2663_4 +# 2665| r2665_1(glval) = VariableAddress[data] : +# 2665| r2665_2(int *) = Constant[0] : +# 2665| mu2665_3(int *) = Store[data] : &:r2665_1, r2665_2 +# 2666| r2666_1(glval) = VariableAddress[b] : +# 2666| r2666_2(bool) = Load[b] : &:r2666_1, ~m? +# 2666| v2666_3(void) = ConditionalBranch : r2666_2 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2667| Block 1 +# 2667| r2667_1(glval) = VariableAddress[intBuffer] : +# 2667| r2667_2(int) = Constant[8] : +# 2667| mu2667_3(int) = Store[intBuffer] : &:r2667_1, r2667_2 +# 2668| r2668_1(glval) = VariableAddress[intBuffer] : +# 2668| r2668_2(int *) = CopyValue : r2668_1 +# 2668| r2668_3(glval) = VariableAddress[data] : +# 2668| mu2668_4(int *) = Store[data] : &:r2668_3, r2668_2 +#-----| Goto -> Block 2 + +# 2670| Block 2 +# 2670| r2670_1(glval) = FunctionAddress[use_int] : +# 2670| r2670_2(glval) = VariableAddress[data] : +# 2670| r2670_3(int *) = Load[data] : &:r2670_2, ~m? +# 2670| r2670_4(int) = Load[?] : &:r2670_3, ~m? +# 2670| v2670_5(void) = Call[use_int] : func:r2670_1, 0:r2670_4 +# 2670| mu2670_6(unknown) = ^CallSideEffect : ~m? +# 2671| v2671_1(void) = NoOp : +# 2663| v2663_6(void) = ReturnVoid : +# 2663| v2663_7(void) = AliasedUse : ~m? +# 2663| v2663_8(void) = ExitFunction : + +# 2684| void test(bool) +# 2684| Block 0 +# 2684| v2684_1(void) = EnterFunction : +# 2684| mu2684_2(unknown) = AliasedDefinition : +# 2684| mu2684_3(unknown) = InitializeNonLocal : +# 2684| r2684_4(glval) = VariableAddress[b] : +# 2684| mu2684_5(bool) = InitializeParameter[b] : &:r2684_4 +#-----| Goto -> Block 1 + +# 2686| Block 1 +# 2686| r2686_1(glval) = FunctionAddress[use] : +# 2686| r2686_2(glval) = VariableAddress[b] : +# 2686| r2686_3(bool) = Load[b] : &:r2686_2, ~m? +# 2686| v2686_4(void) = ConditionalBranch : r2686_3 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 2686| Block 2 +# 2686| r2686_5(glval) = VariableAddress[#temp2686:18] : +# 2686| r2686_6(char *) = Load[#temp2686:18] : &:r2686_5, ~m? +# 2686| v2686_7(void) = Call[use] : func:r2686_1, 0:r2686_6 +# 2686| mu2686_8(unknown) = ^CallSideEffect : ~m? +# 2686| v2686_9(void) = ^BufferReadSideEffect[0] : &:r2686_6, ~m? +# 2686| r2686_10(glval) = FunctionAddress[use] : +# 2686| r2686_11(glval) = VariableAddress[b] : +# 2686| r2686_12(bool) = Load[b] : &:r2686_11, ~m? +# 2686| v2686_13(void) = ConditionalBranch : r2686_12 +#-----| False -> Block 7 +#-----| True -> Block 6 + +# 2686| Block 3 +# 2686| r2686_14(glval) = StringConstant[] : +# 2686| r2686_15(char *) = Convert : r2686_14 +# 2686| r2686_16(glval) = VariableAddress[#temp2686:18] : +# 2686| mu2686_17(char *) = Store[#temp2686:18] : &:r2686_16, r2686_15 +#-----| Goto -> Block 2 + +# 2686| Block 4 +# 2686| r2686_18(glval) = StringConstant[] : +# 2686| r2686_19(char *) = Convert : r2686_18 +# 2686| r2686_20(glval) = VariableAddress[#temp2686:18] : +# 2686| mu2686_21(char *) = Store[#temp2686:18] : &:r2686_20, r2686_19 +#-----| Goto -> Block 2 + +# 2686| Block 5 +# 2686| r2686_22(glval) = VariableAddress[#temp2686:18] : +# 2686| r2686_23(char *) = Load[#temp2686:18] : &:r2686_22, ~m? +# 2686| v2686_24(void) = Call[use] : func:r2686_10, 0:r2686_23 +# 2686| mu2686_25(unknown) = ^CallSideEffect : ~m? +# 2686| v2686_26(void) = ^BufferReadSideEffect[0] : &:r2686_23, ~m? +# 2686| r2686_27(bool) = Constant[0] : +# 2686| v2686_28(void) = ConditionalBranch : r2686_27 +#-----| False -> Block 8 +#-----| True (back edge) -> Block 1 + +# 2686| Block 6 +# 2686| r2686_29(glval) = StringConstant[] : +# 2686| r2686_30(char *) = Convert : r2686_29 +# 2686| r2686_31(glval) = VariableAddress[#temp2686:18] : +# 2686| mu2686_32(char *) = Store[#temp2686:18] : &:r2686_31, r2686_30 +#-----| Goto -> Block 5 + +# 2686| Block 7 +# 2686| r2686_33(glval) = StringConstant[] : +# 2686| r2686_34(char *) = Convert : r2686_33 +# 2686| r2686_35(glval) = VariableAddress[#temp2686:18] : +# 2686| mu2686_36(char *) = Store[#temp2686:18] : &:r2686_35, r2686_34 +#-----| Goto -> Block 5 + +# 2687| Block 8 +# 2687| v2687_1(void) = NoOp : +# 2684| v2684_6(void) = ReturnVoid : +# 2684| v2684_7(void) = AliasedUse : ~m? +# 2684| v2684_8(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/points_to/points_to.expected b/cpp/ql/test/library-tests/ir/points_to/points_to.expected index 8ec8033d086e..e7f5210f1120 100644 --- a/cpp/ql/test/library-tests/ir/points_to/points_to.expected +++ b/cpp/ql/test/library-tests/ir/points_to/points_to.expected @@ -1,2 +1 @@ -testFailures -failures +ERROR: getAllocation() cannot be resolved for type SimpleSSA::MemoryLocation (points_to.ql:31,42-55) diff --git a/cpp/ql/test/library-tests/ir/points_to/points_to.ql b/cpp/ql/test/library-tests/ir/points_to/points_to.ql index 2eafcc55ef00..e05e4ce8f0ca 100644 --- a/cpp/ql/test/library-tests/ir/points_to/points_to.ql +++ b/cpp/ql/test/library-tests/ir/points_to/points_to.ql @@ -56,7 +56,7 @@ module UnaliasedSsa { not memLocation.getVirtualVariable() instanceof AliasedVirtualVariable and not memLocation instanceof AllNonLocalMemory and tag = "ussa" and - not ignoreAllocation(memLocation.getAllocation().getAllocationString()) and + not ignoreAllocation(memLocation.getAnAllocation().getAllocationString()) and value = memLocation.toString() and element = instr.toString() and location = instr.getLocation() and diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected index a357821fcf55..aad6b670188d 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected @@ -381,7 +381,7 @@ ssa.cpp: #-----| Goto -> Block 1 # 69| Block 1 -# 69| m69_1(unknown) = Phi : from 0:~m68_4, from 2:~m70_10 +# 69| m69_1(unknown) = Phi : from 0:m68_10, from 2:m70_10 # 69| m69_2(char *) = Phi : from 0:m68_8, from 2:m70_6 # 69| m69_3(int) = Phi : from 0:m68_6, from 2:m69_8 # 69| r69_4(glval) = VariableAddress[n] : @@ -411,9 +411,9 @@ ssa.cpp: # 71| Block 3 # 71| v71_1(void) = NoOp : -# 68| v68_11(void) = ReturnIndirection[p] : &:r68_9, m68_10 +# 68| v68_11(void) = ReturnIndirection[p] : &:r68_9, m69_1 # 68| v68_12(void) = ReturnVoid : -# 68| v68_13(void) = AliasedUse : ~m69_1 +# 68| v68_13(void) = AliasedUse : m68_3 # 68| v68_14(void) = ExitFunction : # 75| void ScalarPhi(bool) diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected index a357821fcf55..aad6b670188d 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected @@ -381,7 +381,7 @@ ssa.cpp: #-----| Goto -> Block 1 # 69| Block 1 -# 69| m69_1(unknown) = Phi : from 0:~m68_4, from 2:~m70_10 +# 69| m69_1(unknown) = Phi : from 0:m68_10, from 2:m70_10 # 69| m69_2(char *) = Phi : from 0:m68_8, from 2:m70_6 # 69| m69_3(int) = Phi : from 0:m68_6, from 2:m69_8 # 69| r69_4(glval) = VariableAddress[n] : @@ -411,9 +411,9 @@ ssa.cpp: # 71| Block 3 # 71| v71_1(void) = NoOp : -# 68| v68_11(void) = ReturnIndirection[p] : &:r68_9, m68_10 +# 68| v68_11(void) = ReturnIndirection[p] : &:r68_9, m69_1 # 68| v68_12(void) = ReturnVoid : -# 68| v68_13(void) = AliasedUse : ~m69_1 +# 68| v68_13(void) = AliasedUse : m68_3 # 68| v68_14(void) = ExitFunction : # 75| void ScalarPhi(bool) diff --git a/cpp/ql/test/library-tests/members/getters/members.expected b/cpp/ql/test/library-tests/members/getters/members.expected index fac28f04077a..5a379163155d 100644 --- a/cpp/ql/test/library-tests/members/getters/members.expected +++ b/cpp/ql/test/library-tests/members/getters/members.expected @@ -19,7 +19,5 @@ | test.cpp:14:7:14:7 | D | test.cpp:23:10:23:12 | f_D | D::f_D() | getAMember(), getAMember(3), getAMemberFunction(), getCanonicalMember(3), getDeclaringType() | | test.cpp:27:7:27:7 | E | test.cpp:29:10:29:12 | f_E | E::f_E() | getAMember(), getAMember(0), getAMemberFunction(), getCanonicalMember(0), getDeclaringType() | | test.cpp:27:7:27:7 | E | test.cpp:31:10:31:16 | f_E_arg | E::f_E_arg(E) | getAMember(), getAMember(1), getAMemberFunction(), getCanonicalMember(1), getDeclaringType() | -| test.cpp:27:7:27:7 | E | test.cpp:27:7:27:7 | operator= | E::operator=(E &&) | getAMember(), getAMember(3), getAMemberFunction(), getCanonicalMember(3), getDeclaringType() | -| test.cpp:27:7:27:7 | E | test.cpp:27:7:27:7 | operator= | E::operator=(const E &) | getAMember(), getAMember(2), getAMemberFunction(), getCanonicalMember(2), getDeclaringType() | | test.cpp:27:7:27:7 | E | test.cpp:29:10:29:10 | f_E | E::f_E() | getAMember(), getAMember(0), getAMemberFunction(), getCanonicalMember(0), getDeclaringType() | | test.cpp:27:7:27:7 | E | test.cpp:31:10:31:10 | f_E_arg | E::f_E_arg(E) | getAMember(), getAMember(1), getAMemberFunction(), getCanonicalMember(1), getDeclaringType() | diff --git a/cpp/ql/test/library-tests/members/templates/c1.cpp b/cpp/ql/test/library-tests/members/templates/c1.cpp index d407b580f6e4..bda19e3c9732 100644 --- a/cpp/ql/test/library-tests/members/templates/c1.cpp +++ b/cpp/ql/test/library-tests/members/templates/c1.cpp @@ -4,4 +4,7 @@ static void f(void) { CA::CB x; CA::CB y; + + x.operator=(x); + x.operator=(static_cast&&>(x)); } diff --git a/cpp/ql/test/library-tests/members/templates/members.expected b/cpp/ql/test/library-tests/members/templates/members.expected index 770b85cc7b66..28edb28b4199 100644 --- a/cpp/ql/test/library-tests/members/templates/members.expected +++ b/cpp/ql/test/library-tests/members/templates/members.expected @@ -11,9 +11,7 @@ | h.h:2:7:2:8 | CA | 1 CA::operator= | | h.h:2:7:2:8 | CA | 2 CA::operator= | | h.h:5:11:5:12 | CB | | -| h.h:5:11:5:12 | CB | 0 CA::CB::operator= | -| h.h:5:11:5:12 | CB | 1 CA::CB::operator= | -| h.h:5:11:5:12 | CB | 0 CA::CB::operator= | -| h.h:5:11:5:12 | CB | 1 CA::CB::operator= | +| h.h:5:11:5:12 | CB | | +| h.h:5:11:5:12 | CB | | | h.h:5:11:5:12 | CB | 0 CA::CB::operator= | | h.h:5:11:5:12 | CB | 1 CA::CB::operator= | diff --git a/cpp/ql/test/library-tests/noexcept/copy_from_prototype/copy_from_prototype.expected b/cpp/ql/test/library-tests/noexcept/copy_from_prototype/copy_from_prototype.expected index a5250dfccc5c..467e7eb2636e 100644 --- a/cpp/ql/test/library-tests/noexcept/copy_from_prototype/copy_from_prototype.expected +++ b/cpp/ql/test/library-tests/noexcept/copy_from_prototype/copy_from_prototype.expected @@ -1,7 +1,3 @@ -| copy_from_prototype.cpp:3:7:3:7 | a | void a::a(a const&) | copy_from_prototype.cpp:3:7:3:7 | a | | -| copy_from_prototype.cpp:3:7:3:7 | a | void a::a(a&&) | copy_from_prototype.cpp:3:7:3:7 | a | | -| copy_from_prototype.cpp:3:7:3:7 | operator= | a& a::operator=(a const&) | copy_from_prototype.cpp:3:7:3:7 | a | | -| copy_from_prototype.cpp:3:7:3:7 | operator= | a& a::operator=(a&&) | copy_from_prototype.cpp:3:7:3:7 | a | | | copy_from_prototype.cpp:4:26:4:26 | a | void a<(unnamed template parameter)>::a<(unnamed template parameter)>() | copy_from_prototype.cpp:3:7:3:7 | a<> | 123 | | copy_from_prototype.cpp:4:26:4:26 | a | void a::a<(unnamed template parameter)>() | copy_from_prototype.cpp:3:7:3:7 | a | | | copy_from_prototype.cpp:7:7:7:7 | b | void b::b() | copy_from_prototype.cpp:7:7:7:7 | b | | @@ -9,10 +5,6 @@ | copy_from_prototype.cpp:7:7:7:7 | b | void b::b(b&&) | copy_from_prototype.cpp:7:7:7:7 | b | | | copy_from_prototype.cpp:7:7:7:7 | operator= | b& b::operator=(b const&) | copy_from_prototype.cpp:7:7:7:7 | b | | | copy_from_prototype.cpp:7:7:7:7 | operator= | b& b::operator=(b&&) | copy_from_prototype.cpp:7:7:7:7 | b | | -| copy_from_prototype.cpp:13:7:13:7 | c | void c::c(c const&) | copy_from_prototype.cpp:13:7:13:7 | c | | -| copy_from_prototype.cpp:13:7:13:7 | c | void c::c(c&&) | copy_from_prototype.cpp:13:7:13:7 | c | | -| copy_from_prototype.cpp:13:7:13:7 | operator= | c& c::operator=(c const&) | copy_from_prototype.cpp:13:7:13:7 | c | | -| copy_from_prototype.cpp:13:7:13:7 | operator= | c& c::operator=(c&&) | copy_from_prototype.cpp:13:7:13:7 | c | | | copy_from_prototype.cpp:14:26:14:26 | c | void c::c<(unnamed template parameter)>() | copy_from_prototype.cpp:13:7:13:7 | c | X | | copy_from_prototype.cpp:14:26:14:26 | c | void c::c<(unnamed template parameter)>() | copy_from_prototype.cpp:13:7:13:7 | c | | | copy_from_prototype.cpp:17:7:17:7 | d | void d::d() | copy_from_prototype.cpp:17:7:17:7 | d | | @@ -20,10 +12,6 @@ | copy_from_prototype.cpp:17:7:17:7 | d | void d::d(d&&) | copy_from_prototype.cpp:17:7:17:7 | d | | | copy_from_prototype.cpp:17:7:17:7 | operator= | d& d::operator=(d const&) | copy_from_prototype.cpp:17:7:17:7 | d | | | copy_from_prototype.cpp:17:7:17:7 | operator= | d& d::operator=(d&&) | copy_from_prototype.cpp:17:7:17:7 | d | | -| copy_from_prototype.cpp:22:8:22:8 | e | void e::e(e const&) | copy_from_prototype.cpp:22:8:22:8 | e | | -| copy_from_prototype.cpp:22:8:22:8 | e | void e::e(e&&) | copy_from_prototype.cpp:22:8:22:8 | e | | -| copy_from_prototype.cpp:22:8:22:8 | operator= | e& e::operator=(e const&) | copy_from_prototype.cpp:22:8:22:8 | e | | -| copy_from_prototype.cpp:22:8:22:8 | operator= | e& e::operator=(e&&) | copy_from_prototype.cpp:22:8:22:8 | e | | | copy_from_prototype.cpp:23:26:23:26 | e | void e::e<(unnamed template parameter)>() | copy_from_prototype.cpp:22:8:22:8 | e | 456 | | copy_from_prototype.cpp:26:35:26:43 | e | void e::e<(unnamed template parameter)>() | copy_from_prototype.cpp:22:8:22:8 | e | 456 | | file://:0:0:0:0 | operator= | __va_list_tag& __va_list_tag::operator=(__va_list_tag const&) | file://:0:0:0:0 | __va_list_tag | | diff --git a/cpp/ql/test/library-tests/noexcept/noexcept/noexcept_specifier.expected b/cpp/ql/test/library-tests/noexcept/noexcept/noexcept_specifier.expected index 344551c24aa4..57a58405ba07 100644 --- a/cpp/ql/test/library-tests/noexcept/noexcept/noexcept_specifier.expected +++ b/cpp/ql/test/library-tests/noexcept/noexcept/noexcept_specifier.expected @@ -1,20 +1,4 @@ | box.cpp:3:6:3:6 | definition of h | -------- | --- | -| box.h:2:8:2:8 | declaration of Box | -------- | --- | -| box.h:2:8:2:8 | declaration of Box | -------- | --- | -| box.h:2:8:2:8 | declaration of Box | -------- | --- | -| box.h:2:8:2:8 | declaration of Box | -------- | --- | -| box.h:2:8:2:8 | declaration of operator= | -------- | --- | -| box.h:2:8:2:8 | declaration of operator= | -------- | --- | -| box.h:2:8:2:8 | declaration of operator= | -------- | --- | -| box.h:2:8:2:8 | declaration of operator= | -------- | --- | -| box.h:2:8:2:8 | declaration of operator= | -------- | --- | -| box.h:2:8:2:8 | declaration of operator= | -------- | --- | -| box.h:2:8:2:8 | declaration of operator= | -------- | --- | -| box.h:2:8:2:8 | declaration of operator= | -------- | --- | -| box.h:2:8:2:8 | definition of Box | no except | --- | -| box.h:2:8:2:8 | definition of Box | no except | --- | -| box.h:2:8:2:8 | definition of Box | no except | --- | -| box.h:2:8:2:8 | definition of Box | no except | --- | | box.h:3:3:3:3 | definition of Box | -------- | __has_nothrow_copy | | box.h:3:3:3:3 | definition of Box | -------- | __has_nothrow_copy | | box.h:3:3:3:3 | definition of Box | -------- | __has_nothrow_copy | diff --git a/cpp/ql/test/library-tests/scopes/scopes/Scopes1.expected b/cpp/ql/test/library-tests/scopes/scopes/Scopes1.expected index f89e8fbeb8bc..7a3da02731d8 100644 --- a/cpp/ql/test/library-tests/scopes/scopes/Scopes1.expected +++ b/cpp/ql/test/library-tests/scopes/scopes/Scopes1.expected @@ -63,13 +63,7 @@ | scopes.cpp:74:11:74:13 | One | Namespace | scopes.cpp:95:8:95:8 | I | Class | | scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:76:18:76:18 | T | | | scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:79:5:79:5 | t | | -| scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:77:8:77:8 | H | | -| scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:77:8:77:8 | operator= | | -| scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:77:8:77:8 | operator= | | | scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:79:5:79:5 | t | | -| scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:77:8:77:8 | H | | -| scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:77:8:77:8 | operator= | | -| scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:77:8:77:8 | operator= | | | scopes.cpp:77:8:77:8 | H | Class | scopes.cpp:79:5:79:5 | t | | | scopes.cpp:85:12:85:14 | One::Two | Namespace | scopes.cpp:87:8:87:13 | myEnum | | | scopes.cpp:95:8:95:8 | I | Class | scopes.cpp:95:8:95:8 | operator= | | diff --git a/cpp/ql/test/library-tests/scopes/scopes/Scopes3.expected b/cpp/ql/test/library-tests/scopes/scopes/Scopes3.expected index 94f46c73f754..dc525674dcea 100644 --- a/cpp/ql/test/library-tests/scopes/scopes/Scopes3.expected +++ b/cpp/ql/test/library-tests/scopes/scopes/Scopes3.expected @@ -31,11 +31,5 @@ | scopes.cpp:67:3:67:8 | ~Table | | scopes.cpp:62:7:62:11 | Table | 8 | | scopes.cpp:68:9:68:14 | lookup | | scopes.cpp:62:7:62:11 | Table | 8 | | scopes.cpp:69:8:69:13 | insert | | scopes.cpp:62:7:62:11 | Table | 8 | -| scopes.cpp:77:8:77:8 | H | Constructor | scopes.cpp:77:8:77:8 | H | 4 | -| scopes.cpp:77:8:77:8 | H | Constructor | scopes.cpp:77:8:77:8 | H | 4 | -| scopes.cpp:77:8:77:8 | operator= | | scopes.cpp:77:8:77:8 | H | 4 | -| scopes.cpp:77:8:77:8 | operator= | | scopes.cpp:77:8:77:8 | H | 4 | -| scopes.cpp:77:8:77:8 | operator= | | scopes.cpp:77:8:77:8 | H | 4 | -| scopes.cpp:77:8:77:8 | operator= | | scopes.cpp:77:8:77:8 | H | 4 | | scopes.cpp:95:8:95:8 | operator= | | scopes.cpp:95:8:95:8 | I | 3 | | scopes.cpp:95:8:95:8 | operator= | | scopes.cpp:95:8:95:8 | I | 3 | diff --git a/cpp/ql/test/library-tests/scopes/scopes/Scopes4.expected b/cpp/ql/test/library-tests/scopes/scopes/Scopes4.expected index fda8ff9a7d8d..fbe73938d7bc 100644 --- a/cpp/ql/test/library-tests/scopes/scopes/Scopes4.expected +++ b/cpp/ql/test/library-tests/scopes/scopes/Scopes4.expected @@ -36,11 +36,5 @@ | scopes.cpp:68:9:68:14 | lookup | | 1 | 1 | | scopes.cpp:69:8:69:13 | insert | | 1 | 1 | | scopes.cpp:72:16:72:21 | strlen | isTopLevel() | 1 | 1 | -| scopes.cpp:77:8:77:8 | H | | 1 | 0 | -| scopes.cpp:77:8:77:8 | H | | 1 | 0 | -| scopes.cpp:77:8:77:8 | operator= | | 1 | 0 | -| scopes.cpp:77:8:77:8 | operator= | | 1 | 0 | -| scopes.cpp:77:8:77:8 | operator= | | 1 | 0 | -| scopes.cpp:77:8:77:8 | operator= | | 1 | 0 | | scopes.cpp:95:8:95:8 | operator= | | 1 | 0 | | scopes.cpp:95:8:95:8 | operator= | | 1 | 0 | diff --git a/cpp/ql/test/library-tests/special_members/generated_copy/functions.expected b/cpp/ql/test/library-tests/special_members/generated_copy/functions.expected index e60a795b9c0f..dedd69ddf68d 100644 --- a/cpp/ql/test/library-tests/special_members/generated_copy/functions.expected +++ b/cpp/ql/test/library-tests/special_members/generated_copy/functions.expected @@ -34,13 +34,6 @@ | copy.cpp:59:9:59:9 | HasArray2D | void private_cc::HasArray2D::HasArray2D(private_cc::HasArray2D&) | deleted | | | copy.cpp:59:9:59:9 | operator= | private_cc::HasArray2D& private_cc::HasArray2D::operator=(private_cc::HasArray2D const&) | | | | copy.cpp:59:9:59:9 | operator= | private_cc::HasArray2D& private_cc::HasArray2D::operator=(private_cc::HasArray2D&&) | | | -| copy.cpp:67:9:67:9 | Wrapper | void container::Wrapper::Wrapper() | | | -| copy.cpp:67:9:67:9 | Wrapper | void container::Wrapper::Wrapper() | deleted | | -| copy.cpp:67:9:67:9 | Wrapper | void container::Wrapper::Wrapper(container::Wrapper const&) | deleted | | -| copy.cpp:67:9:67:9 | Wrapper | void container::Wrapper::Wrapper(container::Wrapper&&) | | | -| copy.cpp:67:9:67:9 | operator= | container::Wrapper& container::Wrapper::operator=(container::Wrapper const&) | | | -| copy.cpp:67:9:67:9 | operator= | container::Wrapper& container::Wrapper::operator=(container::Wrapper&&) | | | -| copy.cpp:67:9:67:9 | operator= | container::Wrapper& container::Wrapper::operator=(container::Wrapper const&) | deleted | | | copy.cpp:71:9:71:9 | operator= | container::Copyable& container::Copyable::operator=(container::Copyable const&) | | | | copy.cpp:71:9:71:9 | operator= | container::Copyable& container::Copyable::operator=(container::Copyable&&) | | | | copy.cpp:72:9:72:9 | NotCopyable | void container::NotCopyable::NotCopyable() | deleted | | @@ -85,7 +78,6 @@ | copy.cpp:131:9:131:9 | OnlyAssign | void difference::OnlyAssign::OnlyAssign(difference::OnlyAssign const&) | deleted | | | copy.cpp:131:9:131:9 | operator= | difference::OnlyAssign& difference::OnlyAssign::operator=(difference::OnlyAssign const&) | | | | copy.cpp:131:9:131:9 | operator= | difference::OnlyAssign& difference::OnlyAssign::operator=(difference::OnlyAssign&&) | | | -| copy.cpp:137:9:137:9 | operator= | instantiated_explicit_ctor::Wrapper& instantiated_explicit_ctor::Wrapper::operator=(instantiated_explicit_ctor::Wrapper const&) | | | | copy.cpp:139:5:139:11 | Wrapper | void instantiated_explicit_ctor::Wrapper::Wrapper(instantiated_explicit_ctor::Wrapper&) | | | | copy.cpp:143:5:143:5 | Wrapper | void instantiated_explicit_ctor::Wrapper::Wrapper() | | | | copy.cpp:143:5:143:11 | Wrapper | void instantiated_explicit_ctor::Wrapper::Wrapper() | | | diff --git a/cpp/ql/test/library-tests/templates/CPP-203/decls.expected b/cpp/ql/test/library-tests/templates/CPP-203/decls.expected index 33aa6114052a..3fadc0abd938 100644 --- a/cpp/ql/test/library-tests/templates/CPP-203/decls.expected +++ b/cpp/ql/test/library-tests/templates/CPP-203/decls.expected @@ -1,7 +1,5 @@ | file://:0:0:0:0 | (unnamed parameter 0) | | file://:0:0:0:0 | (unnamed parameter 0) | -| file://:0:0:0:0 | (unnamed parameter 0) | -| file://:0:0:0:0 | (unnamed parameter 0) | | file://:0:0:0:0 | __va_list_tag | | file://:0:0:0:0 | auto | | file://:0:0:0:0 | fp_offset | @@ -11,8 +9,6 @@ | file://:0:0:0:0 | overflow_arg_area | | file://:0:0:0:0 | reg_save_area | | test.cpp:2:16:2:16 | T | -| test.cpp:3:8:3:8 | operator= | -| test.cpp:3:8:3:8 | operator= | | test.cpp:3:8:3:10 | Str | | test.cpp:3:8:3:10 | Str | | test.cpp:7:16:7:16 | T | diff --git a/cpp/ql/test/library-tests/templates/friends/decls.expected b/cpp/ql/test/library-tests/templates/friends/decls.expected index b73562094ead..e8a5e3d22a04 100644 --- a/cpp/ql/test/library-tests/templates/friends/decls.expected +++ b/cpp/ql/test/library-tests/templates/friends/decls.expected @@ -1,9 +1,5 @@ | file://:0:0:0:0 | (unnamed parameter 0) | | file://:0:0:0:0 | (unnamed parameter 0) | -| file://:0:0:0:0 | (unnamed parameter 0) | -| file://:0:0:0:0 | (unnamed parameter 0) | -| file://:0:0:0:0 | (unnamed parameter 0) | -| file://:0:0:0:0 | (unnamed parameter 0) | | file://:0:0:0:0 | C's friend | | file://:0:0:0:0 | C's friend | | file://:0:0:0:0 | auto | @@ -24,10 +20,6 @@ | friends.cpp:7:9:7:9 | C | | friends.cpp:7:9:7:9 | C | | friends.cpp:7:9:7:9 | C | -| friends.cpp:7:9:7:9 | operator= | -| friends.cpp:7:9:7:9 | operator= | -| friends.cpp:7:9:7:9 | operator= | -| friends.cpp:7:9:7:9 | operator= | | friends.cpp:9:17:9:17 | f | | friends.cpp:9:17:9:19 | C's friend | | friends.cpp:9:21:9:26 | (unnamed parameter 0) | diff --git a/cpp/ql/test/library-tests/templates/incomplete_instantiations/test.expected b/cpp/ql/test/library-tests/templates/incomplete_instantiations/test.expected index 1cbf49e14d63..64481b4dbc5e 100644 --- a/cpp/ql/test/library-tests/templates/incomplete_instantiations/test.expected +++ b/cpp/ql/test/library-tests/templates/incomplete_instantiations/test.expected @@ -1,13 +1,5 @@ | h.h:3:7:3:7 | C | h.h:4:10:4:12 | fun | 0 | -| h.h:3:7:3:7 | C | h.h:3:7:3:7 | operator= | 0 | -| h.h:3:7:3:7 | C | h.h:3:7:3:7 | operator= | 0 | -| h.h:3:7:3:7 | C | h.h:3:7:3:7 | operator= | 0 | -| h.h:3:7:3:7 | C | h.h:3:7:3:7 | operator= | 0 | | h.h:8:7:8:7 | D | h.h:10:10:10:12 | fun | 2 | -| h.h:8:7:8:7 | D | h.h:8:7:8:7 | operator= | 0 | -| h.h:8:7:8:7 | D | h.h:8:7:8:7 | operator= | 0 | | h.h:8:7:8:7 | D | h.h:10:10:10:10 | fun | 2 | | h.h:14:7:14:7 | E | h.h:16:10:16:12 | fun | 2 | -| h.h:14:7:14:7 | E | h.h:14:7:14:7 | operator= | 0 | -| h.h:14:7:14:7 | E | h.h:14:7:14:7 | operator= | 0 | | h.h:14:7:14:7 | E | h.h:16:10:16:10 | fun | 2 | diff --git a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromtemplateinstantiation.expected b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromtemplateinstantiation.expected index 629f2569232f..cb35f7a6dd09 100644 --- a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromtemplateinstantiation.expected +++ b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromtemplateinstantiation.expected @@ -45,12 +45,6 @@ | isfromtemplateinstantiation.cpp:38:26:38:26 | definition of a_template_method | isfromtemplateinstantiation.cpp:38:26:38:26 | normal_class::a_template_method() | | isfromtemplateinstantiation.cpp:39:2:40:2 | { ... } | isfromtemplateinstantiation.cpp:38:26:38:26 | normal_class::a_template_method() | | isfromtemplateinstantiation.cpp:40:2:40:2 | return ... | isfromtemplateinstantiation.cpp:38:26:38:26 | normal_class::a_template_method() | -| isfromtemplateinstantiation.cpp:44:26:44:26 | declaration of operator= | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | -| isfromtemplateinstantiation.cpp:44:26:44:26 | declaration of operator= | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | -| isfromtemplateinstantiation.cpp:44:26:44:26 | definition of template_class | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | -| isfromtemplateinstantiation.cpp:44:26:44:26 | template_class::operator=(const template_class &) | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | -| isfromtemplateinstantiation.cpp:44:26:44:26 | template_class::operator=(template_class &&) | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | -| isfromtemplateinstantiation.cpp:44:26:44:26 | template_class::template_class() | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | | isfromtemplateinstantiation.cpp:46:4:46:4 | definition of t | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | | isfromtemplateinstantiation.cpp:46:4:46:4 | t | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | | isfromtemplateinstantiation.cpp:49:7:49:7 | definition of b_method | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | @@ -75,22 +69,6 @@ | isfromtemplateinstantiation.cpp:54:2:55:2 | { ... } | isfromtemplateinstantiation.cpp:53:26:53:26 | template_class::b_template_method(long) | | isfromtemplateinstantiation.cpp:55:2:55:2 | return ... | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | | isfromtemplateinstantiation.cpp:55:2:55:2 | return ... | isfromtemplateinstantiation.cpp:53:26:53:26 | template_class::b_template_method(long) | -| isfromtemplateinstantiation.cpp:77:26:77:26 | AnotherTemplateClass::operator=(AnotherTemplateClass &&) | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:77:26:77:26 | AnotherTemplateClass::operator=(const AnotherTemplateClass &) | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:77:26:77:26 | AnotherTemplateClass::operator=(AnotherTemplateClass &&) | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:77:26:77:26 | AnotherTemplateClass::operator=(const AnotherTemplateClass &) | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:77:26:77:26 | declaration of operator= | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:77:26:77:26 | declaration of operator= | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:77:26:77:26 | declaration of operator= | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:77:26:77:26 | declaration of operator= | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:82:9:82:9 | AnotherTemplateClass::MyClassStruct::operator=(MyClassStruct &&) | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:82:9:82:9 | AnotherTemplateClass::MyClassStruct::operator=(MyClassStruct &&) | isfromtemplateinstantiation.cpp:82:9:82:21 | MyClassStruct | -| isfromtemplateinstantiation.cpp:82:9:82:9 | AnotherTemplateClass::MyClassStruct::operator=(const MyClassStruct &) | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:82:9:82:9 | AnotherTemplateClass::MyClassStruct::operator=(const MyClassStruct &) | isfromtemplateinstantiation.cpp:82:9:82:21 | MyClassStruct | -| isfromtemplateinstantiation.cpp:82:9:82:9 | declaration of operator= | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:82:9:82:9 | declaration of operator= | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:82:9:82:9 | declaration of operator= | isfromtemplateinstantiation.cpp:82:9:82:21 | MyClassStruct | -| isfromtemplateinstantiation.cpp:82:9:82:9 | declaration of operator= | isfromtemplateinstantiation.cpp:82:9:82:21 | MyClassStruct | | isfromtemplateinstantiation.cpp:82:9:82:21 | MyClassStruct | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | | isfromtemplateinstantiation.cpp:84:6:84:10 | definition of value | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | | isfromtemplateinstantiation.cpp:84:6:84:10 | definition of value | isfromtemplateinstantiation.cpp:82:9:82:21 | MyClassStruct | @@ -126,26 +104,12 @@ | isfromtemplateinstantiation.cpp:99:1:99:1 | return ... | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | | isfromtemplateinstantiation.cpp:99:1:99:1 | return ... | isfromtemplateinstantiation.cpp:97:52:97:52 | AnotherTemplateClass::myMethod2(MyClassEnum) | | isfromtemplateinstantiation.cpp:110:3:110:3 | definition of var_template | isfromtemplateinstantiation.cpp:110:3:110:3 | var_template | -| isfromtemplateinstantiation.cpp:134:29:134:29 | Outer::operator=(Outer &&) | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| isfromtemplateinstantiation.cpp:134:29:134:29 | Outer::operator=(const Outer &) | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| isfromtemplateinstantiation.cpp:134:29:134:29 | declaration of operator= | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| isfromtemplateinstantiation.cpp:134:29:134:29 | declaration of operator= | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| isfromtemplateinstantiation.cpp:135:31:135:31 | Outer::Inner::operator=(Inner &&) | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | -| isfromtemplateinstantiation.cpp:135:31:135:31 | Outer::Inner::operator=(const Inner &) | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | -| isfromtemplateinstantiation.cpp:135:31:135:31 | declaration of operator= | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | -| isfromtemplateinstantiation.cpp:135:31:135:31 | declaration of operator= | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | isfromtemplateinstantiation.cpp:135:31:135:35 | declaration of Inner | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | isfromtemplateinstantiation.cpp:136:7:136:7 | definition of x | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | | isfromtemplateinstantiation.cpp:136:7:136:7 | x | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | | isfromtemplateinstantiation.cpp:137:7:137:7 | definition of y | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | | isfromtemplateinstantiation.cpp:137:7:137:7 | y | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | -| load.cpp:13:7:13:7 | basic_text_iprimitive::basic_text_iprimitive(basic_text_iprimitive &&) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:13:7:13:7 | basic_text_iprimitive::basic_text_iprimitive(const basic_text_iprimitive &) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:13:7:13:7 | basic_text_iprimitive::operator=(const basic_text_iprimitive &) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:13:7:13:7 | declaration of basic_text_iprimitive | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:13:7:13:7 | declaration of basic_text_iprimitive | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:13:7:13:7 | definition of operator= | load.cpp:13:7:13:27 | basic_text_iprimitive | | load.cpp:15:14:15:15 | definition of is | load.cpp:13:7:13:27 | basic_text_iprimitive | | load.cpp:15:14:15:15 | is | load.cpp:13:7:13:27 | basic_text_iprimitive | | load.cpp:22:10:22:13 | basic_text_iprimitive::load(T &) | load.cpp:13:7:13:27 | basic_text_iprimitive | diff --git a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromuninstantiatedtemplate.expected b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromuninstantiatedtemplate.expected index 1e0f26900eb3..8a78058a7230 100644 --- a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromuninstantiatedtemplate.expected +++ b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromuninstantiatedtemplate.expected @@ -1,10 +1,6 @@ isFromUninstantiatedTemplate | file://:0:0:0:0 | 0 | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | | file://:0:0:0:0 | (int)... | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | -| file://:0:0:0:0 | (unnamed parameter 0) | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| file://:0:0:0:0 | (unnamed parameter 0) | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| file://:0:0:0:0 | declaration of 1st parameter | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| file://:0:0:0:0 | declaration of 1st parameter | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | file://:0:0:0:0 | initializer for MyClassEnumConst | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | | isfromtemplateinstantiation.cpp:12:24:12:46 | definition of inner_template_function | isfromtemplateinstantiation.cpp:12:24:12:46 | inner_template_function | | isfromtemplateinstantiation.cpp:12:24:12:46 | inner_template_function | isfromtemplateinstantiation.cpp:12:24:12:46 | inner_template_function | @@ -141,10 +137,6 @@ isFromUninstantiatedTemplate | isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | isfromtemplateinstantiation.cpp:129:6:129:6 | f | | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | isfromtemplateinstantiation.cpp:134:29:134:33 | definition of Outer | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| isfromtemplateinstantiation.cpp:135:31:135:31 | declaration of operator= | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| isfromtemplateinstantiation.cpp:135:31:135:31 | declaration of operator= | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| isfromtemplateinstantiation.cpp:135:31:135:31 | operator= | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | -| isfromtemplateinstantiation.cpp:135:31:135:31 | operator= | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | @@ -358,11 +350,6 @@ isFromUninstantiatedTemplate | isfromtemplateinstantiation.cpp:39:2:40:2 | { ... } | I | | Stmt | | | isfromtemplateinstantiation.cpp:40:2:40:2 | return ... | | T | Stmt | | | isfromtemplateinstantiation.cpp:40:2:40:2 | return ... | I | | Stmt | | -| isfromtemplateinstantiation.cpp:44:26:44:26 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:44:26:44:26 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:44:26:44:26 | operator= | I | | Declaration | | -| isfromtemplateinstantiation.cpp:44:26:44:26 | operator= | I | | Declaration | | -| isfromtemplateinstantiation.cpp:44:26:44:26 | template_class | I | | Declaration | | | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | | T | Declaration | | | isfromtemplateinstantiation.cpp:44:26:44:39 | template_class | I | | Declaration | | | isfromtemplateinstantiation.cpp:46:4:46:4 | definition of t | | T | Definition | | @@ -390,20 +377,8 @@ isFromUninstantiatedTemplate | isfromtemplateinstantiation.cpp:59:5:59:8 | main | | | Declaration | | | isfromtemplateinstantiation.cpp:72:30:72:32 | 97 | | | Expr | | | isfromtemplateinstantiation.cpp:72:30:72:32 | (long)... | | | Expr | | -| isfromtemplateinstantiation.cpp:77:26:77:26 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:77:26:77:26 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:77:26:77:26 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:77:26:77:26 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:77:26:77:26 | operator= | I | | Declaration | | -| isfromtemplateinstantiation.cpp:77:26:77:26 | operator= | I | | Declaration | | -| isfromtemplateinstantiation.cpp:77:26:77:26 | operator= | I | | Declaration | | -| isfromtemplateinstantiation.cpp:77:26:77:26 | operator= | I | | Declaration | | | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | | T | Declaration | | | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | I | | Declaration | | -| isfromtemplateinstantiation.cpp:82:9:82:9 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:82:9:82:9 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:82:9:82:9 | operator= | I | | Declaration | | -| isfromtemplateinstantiation.cpp:82:9:82:9 | operator= | I | | Declaration | | | isfromtemplateinstantiation.cpp:82:9:82:21 | MyClassStruct | | T | Declaration | | | isfromtemplateinstantiation.cpp:82:9:82:21 | MyClassStruct | I | | Declaration | | | isfromtemplateinstantiation.cpp:84:6:84:10 | definition of value | | T | Definition | | @@ -451,16 +426,8 @@ isFromUninstantiatedTemplate | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | | T | Declaration | | | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | I | | Declaration | | | isfromtemplateinstantiation.cpp:129:6:129:6 | f | | T | Declaration | | -| isfromtemplateinstantiation.cpp:134:29:134:29 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:134:29:134:29 | declaration of operator= | I | | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:134:29:134:29 | operator= | I | | Declaration | | -| isfromtemplateinstantiation.cpp:134:29:134:29 | operator= | I | | Declaration | | | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | T | Declaration | | | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | I | | Declaration | | -| isfromtemplateinstantiation.cpp:135:31:135:31 | declaration of operator= | I | T | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:135:31:135:31 | declaration of operator= | I | T | DeclarationEntry | | -| isfromtemplateinstantiation.cpp:135:31:135:31 | operator= | I | T | Declaration | | -| isfromtemplateinstantiation.cpp:135:31:135:31 | operator= | I | T | Declaration | | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | | T | Declaration | | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | I | T | Declaration | | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | I | T | Declaration | | @@ -488,11 +455,6 @@ isFromUninstantiatedTemplate | load.cpp:6:13:6:21 | externInt | | | Expr | Not ref | | load.cpp:7:16:7:20 | (reference to) | | | Expr | | | load.cpp:7:16:7:20 | * ... | | | Expr | | -| load.cpp:13:7:13:7 | basic_text_iprimitive | I | | Declaration | | -| load.cpp:13:7:13:7 | basic_text_iprimitive | I | | Declaration | | -| load.cpp:13:7:13:7 | declaration of basic_text_iprimitive | I | | DeclarationEntry | | -| load.cpp:13:7:13:7 | declaration of basic_text_iprimitive | I | | DeclarationEntry | | -| load.cpp:13:7:13:7 | operator= | I | | Declaration | | | load.cpp:13:7:13:27 | basic_text_iprimitive | | T | Declaration | | | load.cpp:13:7:13:27 | basic_text_iprimitive | I | | Declaration | | | load.cpp:15:14:15:15 | definition of is | | T | Definition | | diff --git a/cpp/ql/test/library-tests/types/refersTo/refersTo.expected b/cpp/ql/test/library-tests/types/refersTo/refersTo.expected index 4d040f251236..0c5644cb0271 100644 --- a/cpp/ql/test/library-tests/types/refersTo/refersTo.expected +++ b/cpp/ql/test/library-tests/types/refersTo/refersTo.expected @@ -4,44 +4,8 @@ | 0 | file://:0:0:0:0 | a[10] | refersTo.cpp:2:7:2:7 | a | direct | | 0 | file://:0:0:0:0 | const a | refersTo.cpp:2:7:2:7 | a | direct | | 0 | file://:0:0:0:0 | const a & | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | const container | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | const container | refersTo.cpp:10:16:10:16 | T | | -| 0 | file://:0:0:0:0 | const container | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | const container | refersTo.cpp:11:7:11:15 | container | direct | -| 0 | file://:0:0:0:0 | const container & | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | const container & | refersTo.cpp:10:16:10:16 | T | | -| 0 | file://:0:0:0:0 | const container & | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | const container & | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | const container> | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | const container> | refersTo.cpp:10:16:10:16 | T | | -| 0 | file://:0:0:0:0 | const container> | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | const container> | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | const container> | refersTo.cpp:11:7:11:15 | container> | direct | -| 0 | file://:0:0:0:0 | const container> & | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | const container> & | refersTo.cpp:10:16:10:16 | T | | -| 0 | file://:0:0:0:0 | const container> & | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | const container> & | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | const container> & | refersTo.cpp:11:7:11:15 | container> | | | 0 | file://:0:0:0:0 | const strange | refersTo.cpp:17:7:17:13 | strange | direct | | 0 | file://:0:0:0:0 | const strange & | refersTo.cpp:17:7:17:13 | strange | | -| 0 | file://:0:0:0:0 | container & | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | container & | refersTo.cpp:10:16:10:16 | T | | -| 0 | file://:0:0:0:0 | container & | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | container & | refersTo.cpp:11:7:11:15 | container | direct | -| 0 | file://:0:0:0:0 | container && | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | container && | refersTo.cpp:10:16:10:16 | T | | -| 0 | file://:0:0:0:0 | container && | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | container && | refersTo.cpp:11:7:11:15 | container | direct | -| 0 | file://:0:0:0:0 | container> & | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | container> & | refersTo.cpp:10:16:10:16 | T | | -| 0 | file://:0:0:0:0 | container> & | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | container> & | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | container> & | refersTo.cpp:11:7:11:15 | container> | direct | -| 0 | file://:0:0:0:0 | container> && | refersTo.cpp:2:7:2:7 | a | | -| 0 | file://:0:0:0:0 | container> && | refersTo.cpp:10:16:10:16 | T | | -| 0 | file://:0:0:0:0 | container> && | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | container> && | refersTo.cpp:11:7:11:15 | container | | -| 0 | file://:0:0:0:0 | container> && | refersTo.cpp:11:7:11:15 | container> | direct | | 0 | file://:0:0:0:0 | strange & | refersTo.cpp:17:7:17:13 | strange | direct | | 0 | file://:0:0:0:0 | strange && | refersTo.cpp:17:7:17:13 | strange | direct | | 2 | refersTo.cpp:2:7:2:7 | a | refersTo.cpp:2:7:2:7 | a | | diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected index 794d35433dfa..ecf31ac87019 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected @@ -468,7 +468,7 @@ test.cpp: # 56| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1 # 56| r56_3(char *) = Load[ptr] : &:r56_2, m56_1 # 56| valnum = m56_1, r56_13, r56_20, r56_3, r59_2 -# 56| r56_4(char) = Load[?] : &:r56_3, ~m49_4 +# 56| r56_4(char) = Load[?] : &:r56_3, ~m49_12 # 56| valnum = r56_14, r56_4, r59_3 # 56| r56_5(int) = Convert : r56_4 # 56| valnum = r56_15, r56_5, r59_4 @@ -491,7 +491,7 @@ test.cpp: # 56| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1 # 56| r56_13(char *) = Load[ptr] : &:r56_12, m56_1 # 56| valnum = m56_1, r56_13, r56_20, r56_3, r59_2 -# 56| r56_14(char) = Load[?] : &:r56_13, ~m49_4 +# 56| r56_14(char) = Load[?] : &:r56_13, ~m49_12 # 56| valnum = r56_14, r56_4, r59_3 # 56| r56_15(int) = Convert : r56_14 # 56| valnum = r56_15, r56_5, r59_4 @@ -521,7 +521,7 @@ test.cpp: # 59| valnum = r50_1, r55_3, r56_12, r56_19, r56_2, r59_1 # 59| r59_2(char *) = Load[ptr] : &:r59_1, m56_1 # 59| valnum = m56_1, r56_13, r56_20, r56_3, r59_2 -# 59| r59_3(char) = Load[?] : &:r59_2, ~m49_4 +# 59| r59_3(char) = Load[?] : &:r59_2, ~m49_12 # 59| valnum = r56_14, r56_4, r59_3 # 59| r59_4(int) = Convert : r59_3 # 59| valnum = r56_15, r56_5, r59_4 diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_mixed_byte_wprintf/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_mixed_byte_wprintf/WrongTypeFormatArguments.expected index 8dfd55c4174b..99810e0e55db 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_mixed_byte_wprintf/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_mixed_byte_wprintf/WrongTypeFormatArguments.expected @@ -1,12 +1,12 @@ -| tests.cpp:18:15:18:22 | Hello | This argument should be of type 'char *' but is of type 'char16_t *'. | -| tests.cpp:19:15:19:22 | Hello | This argument should be of type 'char *' but is of type 'wchar_t *'. | -| tests.cpp:21:15:21:21 | Hello | This argument should be of type 'char16_t *' but is of type 'char *'. | -| tests.cpp:21:15:21:21 | Hello | This argument should be of type 'wchar_t *' but is of type 'char *'. | -| tests.cpp:26:17:26:24 | Hello | This argument should be of type 'char *' but is of type 'char16_t *'. | -| tests.cpp:30:17:30:24 | Hello | This argument should be of type 'wchar_t *' but is of type 'char16_t *'. | -| tests.cpp:35:36:35:43 | Hello | This argument should be of type 'char *' but is of type 'wchar_t *'. | -| tests.cpp:39:36:39:43 | Hello | This argument should be of type 'char16_t *' but is of type 'wchar_t *'. | -| tests.cpp:42:37:42:44 | Hello | This argument should be of type 'char *' but is of type 'char16_t *'. | -| tests.cpp:43:37:43:44 | Hello | This argument should be of type 'char *' but is of type 'wchar_t *'. | -| tests.cpp:45:37:45:43 | Hello | This argument should be of type 'char16_t *' but is of type 'char *'. | -| tests.cpp:47:37:47:44 | Hello | This argument should be of type 'char16_t *' but is of type 'wchar_t *'. | +| tests.cpp:18:15:18:22 | Hello | This format specifier for type 'char *' does not match the argument type 'char16_t *'. | +| tests.cpp:19:15:19:22 | Hello | This format specifier for type 'char *' does not match the argument type 'wchar_t *'. | +| tests.cpp:21:15:21:21 | Hello | This format specifier for type 'char16_t *' does not match the argument type 'char *'. | +| tests.cpp:21:15:21:21 | Hello | This format specifier for type 'wchar_t *' does not match the argument type 'char *'. | +| tests.cpp:26:17:26:24 | Hello | This format specifier for type 'char *' does not match the argument type 'char16_t *'. | +| tests.cpp:30:17:30:24 | Hello | This format specifier for type 'wchar_t *' does not match the argument type 'char16_t *'. | +| tests.cpp:35:36:35:43 | Hello | This format specifier for type 'char *' does not match the argument type 'wchar_t *'. | +| tests.cpp:39:36:39:43 | Hello | This format specifier for type 'char16_t *' does not match the argument type 'wchar_t *'. | +| tests.cpp:42:37:42:44 | Hello | This format specifier for type 'char *' does not match the argument type 'char16_t *'. | +| tests.cpp:43:37:43:44 | Hello | This format specifier for type 'char *' does not match the argument type 'wchar_t *'. | +| tests.cpp:45:37:45:43 | Hello | This format specifier for type 'char16_t *' does not match the argument type 'char *'. | +| tests.cpp:47:37:47:44 | Hello | This format specifier for type 'char16_t *' does not match the argument type 'wchar_t *'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_mixed_word_size/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_mixed_word_size/WrongTypeFormatArguments.expected index 096e9c9cbae5..907b0c1385b0 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_mixed_word_size/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_mixed_word_size/WrongTypeFormatArguments.expected @@ -1,4 +1,4 @@ -| tests_32.cpp:14:16:14:23 | void_ptr | This argument should be of type 'long' but is of type 'void *'. | -| tests_32.cpp:15:15:15:15 | l | This argument should be of type 'void *' but is of type 'long'. | -| tests_64.cpp:14:16:14:23 | void_ptr | This argument should be of type 'long' but is of type 'void *'. | -| tests_64.cpp:15:15:15:15 | l | This argument should be of type 'void *' but is of type 'long'. | +| tests_32.cpp:14:16:14:23 | void_ptr | This format specifier for type 'long' does not match the argument type 'void *'. | +| tests_32.cpp:15:15:15:15 | l | This format specifier for type 'void *' does not match the argument type 'long'. | +| tests_64.cpp:14:16:14:23 | void_ptr | This format specifier for type 'long' does not match the argument type 'void *'. | +| tests_64.cpp:15:15:15:15 | l | This format specifier for type 'void *' does not match the argument type 'long'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_signed_chars/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_signed_chars/WrongTypeFormatArguments.expected index 8556ab875a4c..f3963eff2b02 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_signed_chars/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_signed_chars/WrongTypeFormatArguments.expected @@ -1,62 +1,62 @@ -| format.h:16:59:16:61 | str | This argument should be of type 'int' but is of type 'char *'. | -| format.h:16:64:16:64 | i | This argument should be of type 'double' but is of type 'int'. | -| format.h:16:67:16:67 | d | This argument should be of type 'char *' but is of type 'double'. | -| linux.cpp:15:24:15:41 | call to get_template_value | This argument should be of type 'int' but is of type 'long'. | -| linux_c.c:11:15:11:18 | str3 | This argument should be of type 'char *' but is of type 'short *'. | -| pri_macros.h:15:35:15:40 | my_u64 | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:12:27:12:27 | i | This argument should be of type 'double' but is of type 'int'. | -| printf1.h:18:18:18:18 | i | This argument should be of type 'void *' but is of type 'int'. | -| printf1.h:25:22:25:22 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:27:19:27:20 | cs | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:38:18:38:30 | MYONETHOUSAND | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:44:18:44:20 | ull | This argument should be of type 'int' but is of type 'unsigned long long'. | -| printf1.h:45:18:45:20 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:46:18:46:20 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:113:17:113:17 | d | This argument should be of type 'long double' but is of type 'double'. | -| printf1.h:114:18:114:18 | d | This argument should be of type 'long double' but is of type 'double'. | -| printf1.h:147:19:147:19 | i | This argument should be of type 'long long' but is of type 'int'. | -| printf1.h:148:19:148:20 | ui | This argument should be of type 'unsigned long long' but is of type 'unsigned int'. | -| printf1.h:160:18:160:18 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:161:21:161:21 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:167:17:167:17 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:168:18:168:18 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:169:19:169:19 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:174:17:174:17 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:175:18:175:18 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:176:19:176:19 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:180:17:180:17 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:181:20:181:20 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:183:18:183:18 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:184:21:184:21 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:186:19:186:19 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:187:22:187:22 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:189:19:189:19 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:190:22:190:22 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:192:19:192:19 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:193:22:193:22 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:194:25:194:25 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:198:24:198:24 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:199:21:199:21 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:202:26:202:26 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:203:23:203:23 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:206:25:206:25 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:207:22:207:22 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:210:26:210:26 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:211:23:211:23 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:214:28:214:28 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:215:28:215:28 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:216:25:216:25 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:221:18:221:18 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:222:20:222:20 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:225:23:225:23 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:228:24:228:24 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:231:25:231:25 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:234:25:234:25 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:235:22:235:22 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:276:32:276:32 | s | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:278:17:278:17 | s | This argument should be of type 'int' but is of type 'char *'. | -| real_world.h:61:21:61:22 | & ... | This argument should be of type 'int *' but is of type 'short *'. | -| real_world.h:62:22:62:23 | & ... | This argument should be of type 'short *' but is of type 'int *'. | -| real_world.h:63:22:63:24 | & ... | This argument should be of type 'short *' but is of type 'unsigned int *'. | -| real_world.h:64:22:64:24 | & ... | This argument should be of type 'short *' but is of type 'signed int *'. | -| wide_string.h:25:18:25:20 | c | This argument should be of type 'char' but is of type 'char *'. | +| format.h:16:59:16:61 | str | This format specifier for type 'int' does not match the argument type 'char *'. | +| format.h:16:64:16:64 | i | This format specifier for type 'double' does not match the argument type 'int'. | +| format.h:16:67:16:67 | d | This format specifier for type 'char *' does not match the argument type 'double'. | +| linux.cpp:15:24:15:41 | call to get_template_value | This format specifier for type 'int' does not match the argument type 'long'. | +| linux_c.c:11:15:11:18 | str3 | This format specifier for type 'char *' does not match the argument type 'short *'. | +| pri_macros.h:15:35:15:40 | my_u64 | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:12:27:12:27 | i | This format specifier for type 'double' does not match the argument type 'int'. | +| printf1.h:18:18:18:18 | i | This format specifier for type 'void *' does not match the argument type 'int'. | +| printf1.h:25:22:25:22 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:27:19:27:20 | cs | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:38:18:38:30 | MYONETHOUSAND | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:44:18:44:20 | ull | This format specifier for type 'int' does not match the argument type 'unsigned long long'. | +| printf1.h:45:18:45:20 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:46:18:46:20 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:113:17:113:17 | d | This format specifier for type 'long double' does not match the argument type 'double'. | +| printf1.h:114:18:114:18 | d | This format specifier for type 'long double' does not match the argument type 'double'. | +| printf1.h:147:19:147:19 | i | This format specifier for type 'long long' does not match the argument type 'int'. | +| printf1.h:148:19:148:20 | ui | This format specifier for type 'unsigned long long' does not match the argument type 'unsigned int'. | +| printf1.h:160:18:160:18 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:161:21:161:21 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:167:17:167:17 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:168:18:168:18 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:169:19:169:19 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:174:17:174:17 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:175:18:175:18 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:176:19:176:19 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:180:17:180:17 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:181:20:181:20 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:183:18:183:18 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:184:21:184:21 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:186:19:186:19 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:187:22:187:22 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:189:19:189:19 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:190:22:190:22 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:192:19:192:19 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:193:22:193:22 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:194:25:194:25 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:198:24:198:24 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:199:21:199:21 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:202:26:202:26 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:203:23:203:23 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:206:25:206:25 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:207:22:207:22 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:210:26:210:26 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:211:23:211:23 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:214:28:214:28 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:215:28:215:28 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:216:25:216:25 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:221:18:221:18 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:222:20:222:20 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:225:23:225:23 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:228:24:228:24 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:231:25:231:25 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:234:25:234:25 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:235:22:235:22 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:276:32:276:32 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:278:17:278:17 | s | This format specifier for type 'int' does not match the argument type 'char *'. | +| real_world.h:61:21:61:22 | & ... | This format specifier for type 'int *' does not match the argument type 'short *'. | +| real_world.h:62:22:62:23 | & ... | This format specifier for type 'short *' does not match the argument type 'int *'. | +| real_world.h:63:22:63:24 | & ... | This format specifier for type 'short *' does not match the argument type 'unsigned int *'. | +| real_world.h:64:22:64:24 | & ... | This format specifier for type 'short *' does not match the argument type 'signed int *'. | +| wide_string.h:25:18:25:20 | c | This format specifier for type 'char' does not match the argument type 'char *'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_two_byte_wprintf/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_two_byte_wprintf/WrongTypeFormatArguments.expected index 1a1ff20bd275..0e62df1dd7fd 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_two_byte_wprintf/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_two_byte_wprintf/WrongTypeFormatArguments.expected @@ -1,2 +1,2 @@ -| printf.cpp:43:29:43:35 | test | This argument should be of type 'char *' but is of type 'char16_t *'. | -| printf.cpp:50:29:50:35 | test | This argument should be of type 'char16_t *' but is of type 'wchar_t *'. | +| printf.cpp:43:29:43:35 | test | This format specifier for type 'char *' does not match the argument type 'char16_t *'. | +| printf.cpp:50:29:50:35 | test | This format specifier for type 'char16_t *' does not match the argument type 'wchar_t *'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_unsigned_chars/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_unsigned_chars/WrongTypeFormatArguments.expected index de24649beb89..45bf793082eb 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_unsigned_chars/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Linux_unsigned_chars/WrongTypeFormatArguments.expected @@ -1,20 +1,20 @@ -| format.h:16:59:16:61 | str | This argument should be of type 'int' but is of type 'char *'. | -| format.h:16:64:16:64 | i | This argument should be of type 'double' but is of type 'int'. | -| format.h:16:67:16:67 | d | This argument should be of type 'char *' but is of type 'double'. | -| pri_macros.h:15:35:15:40 | my_u64 | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:12:27:12:27 | i | This argument should be of type 'double' but is of type 'int'. | -| printf1.h:18:18:18:18 | i | This argument should be of type 'void *' but is of type 'int'. | -| printf1.h:25:22:25:22 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:27:19:27:20 | cs | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:38:18:38:30 | MYONETHOUSAND | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:44:18:44:20 | ull | This argument should be of type 'int' but is of type 'unsigned long long'. | -| printf1.h:45:18:45:20 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:46:18:46:20 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:130:18:130:18 | 0 | This argument should be of type 'void *' but is of type 'int'. | -| printf1.h:168:19:168:19 | i | This argument should be of type 'long long' but is of type 'int'. | -| printf1.h:169:19:169:20 | ui | This argument should be of type 'unsigned long long' but is of type 'unsigned int'. | -| real_world.h:61:21:61:22 | & ... | This argument should be of type 'int *' but is of type 'short *'. | -| real_world.h:62:22:62:23 | & ... | This argument should be of type 'short *' but is of type 'int *'. | -| real_world.h:63:22:63:24 | & ... | This argument should be of type 'short *' but is of type 'unsigned int *'. | -| real_world.h:64:22:64:24 | & ... | This argument should be of type 'short *' but is of type 'signed int *'. | -| wide_string.h:25:18:25:20 | c | This argument should be of type 'char' but is of type 'char *'. | +| format.h:16:59:16:61 | str | This format specifier for type 'int' does not match the argument type 'char *'. | +| format.h:16:64:16:64 | i | This format specifier for type 'double' does not match the argument type 'int'. | +| format.h:16:67:16:67 | d | This format specifier for type 'char *' does not match the argument type 'double'. | +| pri_macros.h:15:35:15:40 | my_u64 | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:12:27:12:27 | i | This format specifier for type 'double' does not match the argument type 'int'. | +| printf1.h:18:18:18:18 | i | This format specifier for type 'void *' does not match the argument type 'int'. | +| printf1.h:25:22:25:22 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:27:19:27:20 | cs | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:38:18:38:30 | MYONETHOUSAND | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:44:18:44:20 | ull | This format specifier for type 'int' does not match the argument type 'unsigned long long'. | +| printf1.h:45:18:45:20 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:46:18:46:20 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:130:18:130:18 | 0 | This format specifier for type 'void *' does not match the argument type 'int'. | +| printf1.h:168:19:168:19 | i | This format specifier for type 'long long' does not match the argument type 'int'. | +| printf1.h:169:19:169:20 | ui | This format specifier for type 'unsigned long long' does not match the argument type 'unsigned int'. | +| real_world.h:61:21:61:22 | & ... | This format specifier for type 'int *' does not match the argument type 'short *'. | +| real_world.h:62:22:62:23 | & ... | This format specifier for type 'short *' does not match the argument type 'int *'. | +| real_world.h:63:22:63:24 | & ... | This format specifier for type 'short *' does not match the argument type 'unsigned int *'. | +| real_world.h:64:22:64:24 | & ... | This format specifier for type 'short *' does not match the argument type 'signed int *'. | +| wide_string.h:25:18:25:20 | c | This format specifier for type 'char' does not match the argument type 'char *'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft/WrongTypeFormatArguments.expected index 8e2cdb7845ae..8a05434fde65 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft/WrongTypeFormatArguments.expected @@ -1,37 +1,37 @@ -| format.h:16:59:16:61 | str | This argument should be of type 'int' but is of type 'char *'. | -| format.h:16:64:16:64 | i | This argument should be of type 'double' but is of type 'int'. | -| format.h:16:67:16:67 | d | This argument should be of type 'char *' but is of type 'double'. | -| pri_macros.h:15:35:15:40 | my_u64 | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:12:27:12:27 | i | This argument should be of type 'double' but is of type 'int'. | -| printf1.h:18:18:18:18 | i | This argument should be of type 'void *' but is of type 'int'. | -| printf1.h:25:22:25:22 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:27:19:27:20 | cs | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:38:18:38:30 | MYONETHOUSAND | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:44:18:44:20 | ull | This argument should be of type 'int' but is of type 'unsigned long long'. | -| printf1.h:45:18:45:20 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:46:18:46:20 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:71:19:71:20 | st | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:72:19:72:20 | ST | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:73:19:73:22 | c_st | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:74:19:74:22 | C_ST | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:75:19:75:28 | sizeof() | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:84:23:84:35 | ... - ... | This argument should be of type 'ssize_t' but is of type 'long long'. | -| printf1.h:116:16:116:24 | myString3 | This argument should be of type '__wchar_t *' but is of type 'int *'. | -| printf1.h:117:16:117:24 | myString4 | This argument should be of type '__wchar_t *' but is of type 'int *'. | -| printf1.h:130:18:130:18 | 0 | This argument should be of type 'void *' but is of type 'int'. | -| printf1.h:181:21:181:22 | ll | This argument should be of type 'int' but is of type 'long long'. | -| printf1.h:182:21:182:23 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:185:21:185:23 | i64 | This argument should be of type 'int' but is of type 'long long'. | -| printf1.h:186:21:186:23 | u64 | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:188:21:188:21 | i | This argument should be of type 'long long' but is of type 'int'. | -| printf1.h:189:21:189:22 | ui | This argument should be of type 'unsigned long long' but is of type 'unsigned int'. | -| printf1.h:190:21:190:21 | l | This argument should be of type 'long long' but is of type 'long'. | -| printf1.h:191:21:191:22 | ul | This argument should be of type 'unsigned long long' but is of type 'unsigned long'. | -| printf1.h:194:21:194:23 | i32 | This argument should be of type 'long long' but is of type 'int'. | -| printf1.h:195:21:195:23 | u32 | This argument should be of type 'unsigned long long' but is of type 'unsigned int'. | -| real_world.h:61:21:61:22 | & ... | This argument should be of type 'int *' but is of type 'short *'. | -| real_world.h:62:22:62:23 | & ... | This argument should be of type 'short *' but is of type 'int *'. | -| real_world.h:63:22:63:24 | & ... | This argument should be of type 'short *' but is of type 'unsigned int *'. | -| real_world.h:64:22:64:24 | & ... | This argument should be of type 'short *' but is of type 'signed int *'. | -| wide_string.h:25:18:25:20 | c | This argument should be of type 'char' but is of type 'char *'. | -| wide_string.h:29:19:29:22 | c | This argument should be of type 'wchar_t' but is of type '__wchar_t *'. | +| format.h:16:59:16:61 | str | This format specifier for type 'int' does not match the argument type 'char *'. | +| format.h:16:64:16:64 | i | This format specifier for type 'double' does not match the argument type 'int'. | +| format.h:16:67:16:67 | d | This format specifier for type 'char *' does not match the argument type 'double'. | +| pri_macros.h:15:35:15:40 | my_u64 | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:12:27:12:27 | i | This format specifier for type 'double' does not match the argument type 'int'. | +| printf1.h:18:18:18:18 | i | This format specifier for type 'void *' does not match the argument type 'int'. | +| printf1.h:25:22:25:22 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:27:19:27:20 | cs | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:38:18:38:30 | MYONETHOUSAND | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:44:18:44:20 | ull | This format specifier for type 'int' does not match the argument type 'unsigned long long'. | +| printf1.h:45:18:45:20 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:46:18:46:20 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:71:19:71:20 | st | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:72:19:72:20 | ST | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:73:19:73:22 | c_st | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:74:19:74:22 | C_ST | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:75:19:75:28 | sizeof() | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:84:23:84:35 | ... - ... | This format specifier for type 'ssize_t' does not match the argument type 'long long'. | +| printf1.h:116:16:116:24 | myString3 | This format specifier for type '__wchar_t *' does not match the argument type 'int *'. | +| printf1.h:117:16:117:24 | myString4 | This format specifier for type '__wchar_t *' does not match the argument type 'int *'. | +| printf1.h:130:18:130:18 | 0 | This format specifier for type 'void *' does not match the argument type 'int'. | +| printf1.h:181:21:181:22 | ll | This format specifier for type 'int' does not match the argument type 'long long'. | +| printf1.h:182:21:182:23 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:185:21:185:23 | i64 | This format specifier for type 'int' does not match the argument type 'long long'. | +| printf1.h:186:21:186:23 | u64 | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:188:21:188:21 | i | This format specifier for type 'long long' does not match the argument type 'int'. | +| printf1.h:189:21:189:22 | ui | This format specifier for type 'unsigned long long' does not match the argument type 'unsigned int'. | +| printf1.h:190:21:190:21 | l | This format specifier for type 'long long' does not match the argument type 'long'. | +| printf1.h:191:21:191:22 | ul | This format specifier for type 'unsigned long long' does not match the argument type 'unsigned long'. | +| printf1.h:194:21:194:23 | i32 | This format specifier for type 'long long' does not match the argument type 'int'. | +| printf1.h:195:21:195:23 | u32 | This format specifier for type 'unsigned long long' does not match the argument type 'unsigned int'. | +| real_world.h:61:21:61:22 | & ... | This format specifier for type 'int *' does not match the argument type 'short *'. | +| real_world.h:62:22:62:23 | & ... | This format specifier for type 'short *' does not match the argument type 'int *'. | +| real_world.h:63:22:63:24 | & ... | This format specifier for type 'short *' does not match the argument type 'unsigned int *'. | +| real_world.h:64:22:64:24 | & ... | This format specifier for type 'short *' does not match the argument type 'signed int *'. | +| wide_string.h:25:18:25:20 | c | This format specifier for type 'char' does not match the argument type 'char *'. | +| wide_string.h:29:19:29:22 | c | This format specifier for type 'wchar_t' does not match the argument type '__wchar_t *'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft_no_wchar/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft_no_wchar/WrongTypeFormatArguments.expected index 933e2ec297b9..f50708f9eb4c 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft_no_wchar/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Microsoft_no_wchar/WrongTypeFormatArguments.expected @@ -1,35 +1,35 @@ -| format.h:16:59:16:61 | str | This argument should be of type 'int' but is of type 'char *'. | -| format.h:16:64:16:64 | i | This argument should be of type 'double' but is of type 'int'. | -| format.h:16:67:16:67 | d | This argument should be of type 'char *' but is of type 'double'. | -| pri_macros.h:15:35:15:40 | my_u64 | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:12:27:12:27 | i | This argument should be of type 'double' but is of type 'int'. | -| printf1.h:18:18:18:18 | i | This argument should be of type 'void *' but is of type 'int'. | -| printf1.h:25:22:25:22 | i | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:27:19:27:20 | cs | This argument should be of type 'int' but is of type 'char *'. | -| printf1.h:38:18:38:30 | MYONETHOUSAND | This argument should be of type 'char *' but is of type 'int'. | -| printf1.h:44:18:44:20 | ull | This argument should be of type 'int' but is of type 'unsigned long long'. | -| printf1.h:45:18:45:20 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:46:18:46:20 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:71:19:71:20 | st | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:72:19:72:20 | ST | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:73:19:73:22 | c_st | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:74:19:74:22 | C_ST | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:75:19:75:28 | sizeof() | This argument should be of type 'ssize_t' but is of type 'unsigned long long'. | -| printf1.h:84:23:84:35 | ... - ... | This argument should be of type 'ssize_t' but is of type 'long long'. | -| printf1.h:130:18:130:18 | 0 | This argument should be of type 'void *' but is of type 'int'. | -| printf1.h:155:21:155:22 | ll | This argument should be of type 'int' but is of type 'long long'. | -| printf1.h:156:21:156:23 | ull | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:159:21:159:23 | i64 | This argument should be of type 'int' but is of type 'long long'. | -| printf1.h:160:21:160:23 | u64 | This argument should be of type 'unsigned int' but is of type 'unsigned long long'. | -| printf1.h:162:21:162:21 | i | This argument should be of type 'long long' but is of type 'int'. | -| printf1.h:163:21:163:22 | ui | This argument should be of type 'unsigned long long' but is of type 'unsigned int'. | -| printf1.h:164:21:164:21 | l | This argument should be of type 'long long' but is of type 'long'. | -| printf1.h:165:21:165:22 | ul | This argument should be of type 'unsigned long long' but is of type 'unsigned long'. | -| printf1.h:168:21:168:23 | i32 | This argument should be of type 'long long' but is of type 'int'. | -| printf1.h:169:21:169:23 | u32 | This argument should be of type 'unsigned long long' but is of type 'unsigned int'. | -| real_world.h:61:21:61:22 | & ... | This argument should be of type 'int *' but is of type 'short *'. | -| real_world.h:62:22:62:23 | & ... | This argument should be of type 'short *' but is of type 'int *'. | -| real_world.h:63:22:63:24 | & ... | This argument should be of type 'short *' but is of type 'unsigned int *'. | -| real_world.h:64:22:64:24 | & ... | This argument should be of type 'short *' but is of type 'signed int *'. | -| wide_string.h:25:18:25:20 | c | This argument should be of type 'char' but is of type 'char *'. | -| wide_string.h:29:19:29:22 | c | This argument should be of type 'wchar_t' but is of type 'unsigned short *'. | +| format.h:16:59:16:61 | str | This format specifier for type 'int' does not match the argument type 'char *'. | +| format.h:16:64:16:64 | i | This format specifier for type 'double' does not match the argument type 'int'. | +| format.h:16:67:16:67 | d | This format specifier for type 'char *' does not match the argument type 'double'. | +| pri_macros.h:15:35:15:40 | my_u64 | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:12:27:12:27 | i | This format specifier for type 'double' does not match the argument type 'int'. | +| printf1.h:18:18:18:18 | i | This format specifier for type 'void *' does not match the argument type 'int'. | +| printf1.h:25:22:25:22 | i | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:27:19:27:20 | cs | This format specifier for type 'int' does not match the argument type 'char *'. | +| printf1.h:38:18:38:30 | MYONETHOUSAND | This format specifier for type 'char *' does not match the argument type 'int'. | +| printf1.h:44:18:44:20 | ull | This format specifier for type 'int' does not match the argument type 'unsigned long long'. | +| printf1.h:45:18:45:20 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:46:18:46:20 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:71:19:71:20 | st | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:72:19:72:20 | ST | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:73:19:73:22 | c_st | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:74:19:74:22 | C_ST | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:75:19:75:28 | sizeof() | This format specifier for type 'ssize_t' does not match the argument type 'unsigned long long'. | +| printf1.h:84:23:84:35 | ... - ... | This format specifier for type 'ssize_t' does not match the argument type 'long long'. | +| printf1.h:130:18:130:18 | 0 | This format specifier for type 'void *' does not match the argument type 'int'. | +| printf1.h:155:21:155:22 | ll | This format specifier for type 'int' does not match the argument type 'long long'. | +| printf1.h:156:21:156:23 | ull | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:159:21:159:23 | i64 | This format specifier for type 'int' does not match the argument type 'long long'. | +| printf1.h:160:21:160:23 | u64 | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long long'. | +| printf1.h:162:21:162:21 | i | This format specifier for type 'long long' does not match the argument type 'int'. | +| printf1.h:163:21:163:22 | ui | This format specifier for type 'unsigned long long' does not match the argument type 'unsigned int'. | +| printf1.h:164:21:164:21 | l | This format specifier for type 'long long' does not match the argument type 'long'. | +| printf1.h:165:21:165:22 | ul | This format specifier for type 'unsigned long long' does not match the argument type 'unsigned long'. | +| printf1.h:168:21:168:23 | i32 | This format specifier for type 'long long' does not match the argument type 'int'. | +| printf1.h:169:21:169:23 | u32 | This format specifier for type 'unsigned long long' does not match the argument type 'unsigned int'. | +| real_world.h:61:21:61:22 | & ... | This format specifier for type 'int *' does not match the argument type 'short *'. | +| real_world.h:62:22:62:23 | & ... | This format specifier for type 'short *' does not match the argument type 'int *'. | +| real_world.h:63:22:63:24 | & ... | This format specifier for type 'short *' does not match the argument type 'unsigned int *'. | +| real_world.h:64:22:64:24 | & ... | This format specifier for type 'short *' does not match the argument type 'signed int *'. | +| wide_string.h:25:18:25:20 | c | This format specifier for type 'char' does not match the argument type 'char *'. | +| wide_string.h:29:19:29:22 | c | This format specifier for type 'wchar_t' does not match the argument type 'unsigned short *'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/SuspiciousCallToStrncat/SuspiciousCallToStrncat.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/SuspiciousCallToStrncat/SuspiciousCallToStrncat.expected index 114cddb11a5d..337bd8f9bc55 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/SuspiciousCallToStrncat/SuspiciousCallToStrncat.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/SuspiciousCallToStrncat/SuspiciousCallToStrncat.expected @@ -3,3 +3,5 @@ | test.c:67:3:67:9 | call to strncat | Potentially unsafe call to strncat. | | test.c:75:3:75:9 | call to strncat | Potentially unsafe call to strncat. | | test.c:76:3:76:9 | call to strncat | Potentially unsafe call to strncat. | +| test.c:91:3:91:9 | call to strncat | Potentially unsafe call to strncat. | +| test.c:99:3:99:9 | call to strncat | Potentially unsafe call to strncat. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/SuspiciousCallToStrncat/test.c b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/SuspiciousCallToStrncat/test.c index f166e5c5ab91..13c18b75dbb4 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/SuspiciousCallToStrncat/test.c +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/SuspiciousCallToStrncat/test.c @@ -82,3 +82,20 @@ void strncat_test5(char *s) { strncat(buf, s, len - strlen(buf) - 1); // GOOD strncat(buf, s, len - strlen(buf)); // GOOD } + +void strncat_test6() { + { + char dest[60]; + dest[0] = '\0'; + // Will write `dest[0 .. 5]` + strncat(dest, "small", sizeof(dest)); // GOOD [FALSE POSITIVE] + } + + { + char dest[60]; + memset(dest, 'a', sizeof(dest)); + dest[54] = '\0'; + // Will write `dest[54 .. 59]` + strncat(dest, "small", sizeof(dest)); // GOOD [FALSE POSITIVE] + } +} \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero/UnsignedDifferenceExpressionComparedZero.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero/UnsignedDifferenceExpressionComparedZero.expected index 85938f154996..e5eb38701fe2 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero/UnsignedDifferenceExpressionComparedZero.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero/UnsignedDifferenceExpressionComparedZero.expected @@ -13,3 +13,5 @@ | test.cpp:266:10:266:24 | ... > ... | Unsigned subtraction can never be negative. | | test.cpp:276:11:276:19 | ... > ... | Unsigned subtraction can never be negative. | | test.cpp:288:10:288:18 | ... > ... | Unsigned subtraction can never be negative. | +| test.cpp:312:9:312:25 | ... > ... | Unsigned subtraction can never be negative. | +| test.cpp:362:8:362:16 | ... > ... | Unsigned subtraction can never be negative. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero/test.cpp index 1a6aaa618e58..37930f821291 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero/test.cpp @@ -43,7 +43,7 @@ void test(unsigned x, unsigned y, bool unknown) { while(cond()) { if(unknown) { y--; } } - + if(x - y > 0) { } // GOOD x = y; @@ -298,3 +298,80 @@ int test18() { return (a - b > 0); // GOOD (as b = 0) } + +typedef unsigned int uint32_t; +typedef long long int64_t; +uint32_t get_limit(); +uint32_t get_data(); + +void test19() { + // from the doc: + uint32_t limit = get_limit(); + uint32_t total = 0; + + while (limit - total > 0) { // BAD: if `total` is greater than `limit` this will underflow and continue executing the loop. + total += get_data(); + } + + while (total < limit) { // GOOD: never underflows here because there is no arithmetic. + total += get_data(); + } + + while ((int64_t)limit - total > 0) { // GOOD: never underflows here because the result always fits in an `int64_t`. + total += get_data(); + } +} + +void test20(int a, bool b, unsigned long c) +{ + int x = 0; + + if(b) { + x = (a - c) / 2; + } else { + x = a - c; + } + + if (a - c - x > 0) // GOOD + { + } +} + +uint32_t get_uint32(); +int64_t get_int64(); + +void test21(unsigned long a) +{ + { + int b = a & get_int64(); + if (a - b > 0) { } // GOOD + } + + { + int b = a - get_uint32(); + if(a - b > 0) { } // GOOD + } + + { + int64_t c = get_int64(); + if(c <= 0) { + int64_t b = (int64_t)a + c; + if(a - b > 0) { } // GOOD + } + int64_t b = (int64_t)a + c; + if(a - b > 0) { } // BAD + } + + { + unsigned c = get_uint32(); + if(c >= 1) { + int b = a / c; + if(a - b > 0) { } // GOOD + } + } + + { + int b = a >> get_uint32(); + if(a - b > 0) { } // GOOD + } +} \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/IteratorToExpiredContainer/IteratorToExpiredContainer.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/IteratorToExpiredContainer/IteratorToExpiredContainer.expected index 362aeb18c239..d3eed7ecffb5 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/IteratorToExpiredContainer/IteratorToExpiredContainer.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/IteratorToExpiredContainer/IteratorToExpiredContainer.expected @@ -3,4 +3,4 @@ | test.cpp:702:27:702:27 | call to operator[] | This object is destroyed at the end of the full-expression. | | test.cpp:727:23:727:23 | call to operator[] | This object is destroyed at the end of the full-expression. | | test.cpp:735:23:735:23 | call to operator[] | This object is destroyed at the end of the full-expression. | -| test.cpp:826:25:826:43 | pointer to ~HasBeginAndEnd output argument | This object is destroyed at the end of the full-expression. | +| test.cpp:857:3:857:17 | pointer to ~PlusPlusReturnByValueIterator output argument | This object is destroyed at the end of the full-expression. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/IteratorToExpiredContainer/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/IteratorToExpiredContainer/test.cpp index 8161df34f432..d4e3c5b269ae 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/IteratorToExpiredContainer/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/IteratorToExpiredContainer/test.cpp @@ -823,8 +823,38 @@ void test6() { while(getBool()) { - for (const int& x : getHasBeginAndEnd()) // GOOD [FALSE POSITIVE] + for (const int& x : getHasBeginAndEnd()) // GOOD { } } } + +struct PlusPlusReturnByValueIterator +{ + using value_type = int; + using difference_type = std::ptrdiff_t; + using pointer = int *; + using reference = int &; + using iterator_category = std::forward_iterator_tag; + + PlusPlusReturnByValueIterator(); + PlusPlusReturnByValueIterator(PlusPlusReturnByValueIterator const &); + + PlusPlusReturnByValueIterator operator++(); + bool operator==(PlusPlusReturnByValueIterator other) const; + bool operator!=(PlusPlusReturnByValueIterator other) const; + reference operator*() const; + pointer operator->() const; + + ~PlusPlusReturnByValueIterator(); + + PlusPlusReturnByValueIterator begin(); +}; + +void test7() +{ + PlusPlusReturnByValueIterator it; + it.operator++(); // GOOD [FALSE POSITIVE] + + it.begin(); +} \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected index 94d01d0e6c13..d27b2c996b33 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected @@ -13,7 +13,6 @@ nodes | test.cpp:458:6:458:6 | definition of x | semmle.label | definition of x | | test.cpp:464:6:464:6 | definition of x | semmle.label | definition of x | | test.cpp:471:6:471:6 | definition of x | semmle.label | definition of x | -| test.cpp:557:15:557:15 | definition of r | semmle.label | definition of r | #select | test.cpp:12:6:12:8 | foo | test.cpp:11:6:11:8 | definition of foo | test.cpp:11:6:11:8 | definition of foo | The variable $@ may not be initialized at this access. | test.cpp:11:6:11:8 | foo | foo | | test.cpp:113:6:113:8 | foo | test.cpp:111:6:111:8 | definition of foo | test.cpp:111:6:111:8 | definition of foo | The variable $@ may not be initialized at this access. | test.cpp:111:6:111:8 | foo | foo | @@ -28,4 +27,3 @@ nodes | test.cpp:460:7:460:7 | x | test.cpp:458:6:458:6 | definition of x | test.cpp:458:6:458:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:458:6:458:6 | x | x | | test.cpp:467:2:467:2 | x | test.cpp:464:6:464:6 | definition of x | test.cpp:464:6:464:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:464:6:464:6 | x | x | | test.cpp:474:7:474:7 | x | test.cpp:471:6:471:6 | definition of x | test.cpp:471:6:471:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:471:6:471:6 | x | x | -| test.cpp:567:7:567:7 | r | test.cpp:557:15:557:15 | definition of r | test.cpp:557:15:557:15 | definition of r | The variable $@ may not be initialized at this access. | test.cpp:557:15:557:15 | r | r | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/test.cpp index 4f56ab1259ab..11330ac53b6c 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/test.cpp @@ -564,5 +564,5 @@ void test45() { } *rP = NULL; - use(r); // GOOD [FALSE POSITIVE] + use(r); // GOOD } \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.expected index 67f1bee2f545..1d48edd7cea1 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.expected @@ -16,3 +16,4 @@ | test.cpp:151:9:151:24 | new | This allocation cannot throw. $@ is unnecessary. | test.cpp:152:15:152:18 | { ... } | This catch block | | test.cpp:199:15:199:35 | new | This allocation cannot throw. $@ is unnecessary. | test.cpp:201:16:201:19 | { ... } | This catch block | | test.cpp:212:14:212:34 | new | This allocation cannot throw. $@ is unnecessary. | test.cpp:213:34:213:36 | { ... } | This catch block | +| test.cpp:246:17:246:31 | new[] | This allocation cannot return null. $@ is unnecessary. | test.cpp:247:8:247:12 | ! ... | This check | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-570/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-570/test.cpp index 046acab20d4e..cedef98a5d8f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-570/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-570/test.cpp @@ -233,3 +233,54 @@ void test_operator_new_without_exception_spec() { int* p = new(42, std::nothrow) int; // GOOD if(p == nullptr) {} } + +namespace std { + void *memset(void *s, int c, size_t n); +} + +// from the qhelp: +namespace qhelp { + // BAD: the allocation will throw an unhandled exception + // instead of returning a null pointer. + void bad1(std::size_t length) noexcept { + int* dest = new int[length]; + if(!dest) { + return; + } + std::memset(dest, 0, length); + // ... + } + + // BAD: the allocation won't throw an exception, but + // instead return a null pointer. [NOT DETECTED] + void bad2(std::size_t length) noexcept { + try { + int* dest = new(std::nothrow) int[length]; + std::memset(dest, 0, length); + // ... + } catch(std::bad_alloc&) { + // ... + } + } + + // GOOD: the allocation failure is handled appropriately. + void good1(std::size_t length) noexcept { + try { + int* dest = new int[length]; + std::memset(dest, 0, length); + // ... + } catch(std::bad_alloc&) { + // ... + } + } + + // GOOD: the allocation failure is handled appropriately. + void good2(std::size_t length) noexcept { + int* dest = new(std::nothrow) int[length]; + if(!dest) { + return; + } + std::memset(dest, 0, length); + // ... + } +} diff --git a/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.expected b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.expected index 50b8f1b96768..c42d0affe41e 100644 --- a/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.expected +++ b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.expected @@ -16,10 +16,6 @@ | | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 8 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__range) | 4: declaration | | | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 12 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__begin) | 6: (__range) | | | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 15 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__end) | 6: (__end) | -| forstmt | forstmt.h:2:8:2:8 | operator= | 2 | 1 | forstmt.h:2:8:2:8 | forstmt.h:2:8:2:8 | forstmt.h:2:8:2:8 | operator= | | -| forstmt | forstmt.h:2:8:2:8 | operator= | 2 | 1 | forstmt.h:2:8:2:8 | forstmt.h:2:8:2:8 | forstmt.h:2:8:2:8 | operator= | | -| forstmt | forstmt.h:3:12:3:12 | operator= | 3 | 1 | forstmt.h:3:12:3:12 | forstmt.h:3:12:3:12 | forstmt.h:3:12:3:12 | operator= | | -| forstmt | forstmt.h:3:12:3:12 | operator= | 3 | 1 | forstmt.h:3:12:3:12 | forstmt.h:3:12:3:12 | forstmt.h:3:12:3:12 | operator= | | | forstmt | forstmt.h:4:19:4:28 | operator++ | 4 | 1 | forstmt.h:4:19:4:28 | forstmt.h:4:19:4:28 | forstmt.h:4:19:4:28 | operator++ | | | forstmt | forstmt.h:4:19:4:28 | operator++ | 4 | 1 | forstmt.h:4:19:4:28 | forstmt.h:4:19:4:28 | forstmt.h:4:19:4:28 | operator++ | | | forstmt | forstmt.h:5:12:5:20 | operator* | 5 | 1 | forstmt.h:5:12:5:20 | forstmt.h:5:12:5:20 | forstmt.h:5:12:5:20 | operator* | | diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index 655c89abd771..0e47f1d1911d 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -69,6 +69,11 @@ private string GetRestoreArgs(RestoreSettings restoreSettings) args += " --force"; } + if (restoreSettings.TargetWindows) + { + args += " /p:EnableWindowsTargeting=true"; + } + return args; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs index c4e4557aa34e..2c10afa80ef2 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs @@ -17,7 +17,7 @@ public interface IDotNet IList GetNugetFeedsFromFolder(string folderPath); } - public record class RestoreSettings(string File, string PackageDirectory, bool ForceDotnetRefAssemblyFetching, string? PathToNugetConfig = null, bool ForceReevaluation = false); + public record class RestoreSettings(string File, string PackageDirectory, bool ForceDotnetRefAssemblyFetching, string? PathToNugetConfig = null, bool ForceReevaluation = false, bool TargetWindows = false); public partial record class RestoreResult(bool Success, IList Output) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs index 4ad4c8c9e31a..5d7a0a8ab928 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs @@ -225,10 +225,13 @@ private IEnumerable RestoreSolutions(out DependencyContainer dependencie var successCount = 0; var nugetSourceFailures = 0; var assets = new Assets(logger); + + var isWindows = fileContent.UseWindowsForms || fileContent.UseWpf; + var projects = fileProvider.Solutions.SelectMany(solution => { logger.LogInfo($"Restoring solution {solution}..."); - var res = dotnet.Restore(new(solution, PackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); + var res = dotnet.Restore(new(solution, PackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true, TargetWindows: isWindows)); if (res.Success) { successCount++; @@ -258,6 +261,9 @@ private void RestoreProjects(IEnumerable projects, out ConcurrentBag collectedDependencies = []; + + var isWindows = fileContent.UseWindowsForms || fileContent.UseWpf; + var sync = new object(); var projectGroups = projects.GroupBy(Path.GetDirectoryName); Parallel.ForEach(projectGroups, new ParallelOptions { MaxDegreeOfParallelism = DependencyManager.Threads }, projectGroup => @@ -266,7 +272,7 @@ private void RestoreProjects(IEnumerable projects, out ConcurrentBag string.Compare(a.FilePath, b.FilePath, StringComparison.Ordinal)); + var compilation = getCompilation(syntaxTrees, references); initializeAnalyser(compilation, options); diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 4f04af923035..503822fbd684 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.21 + +No user-facing changes. + ## 1.7.20 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.21.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.21.md new file mode 100644 index 000000000000..bdd54f47083c --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.21.md @@ -0,0 +1,3 @@ +## 1.7.21 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 747131a0b2b8..87eff681b88a 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.20 +lastReleaseVersion: 1.7.21 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 6a6776d999c3..593ee8b9125b 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.20 +version: 1.7.21 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 4f04af923035..503822fbd684 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.21 + +No user-facing changes. + ## 1.7.20 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.21.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.21.md new file mode 100644 index 000000000000..bdd54f47083c --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.21.md @@ -0,0 +1,3 @@ +## 1.7.21 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 747131a0b2b8..87eff681b88a 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.20 +lastReleaseVersion: 1.7.21 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index cdeaf48373d1..3182e69d6725 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.20 +version: 1.7.21 groups: - csharp - solorigate diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected new file mode 100644 index 000000000000..058ec9e2f355 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected @@ -0,0 +1,47 @@ +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Accessibility.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.Forms.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.Registry.AccessControl.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/Microsoft.Win32.SystemEvents.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationCore.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero2.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Aero.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.AeroLite.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Classic.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Luna.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.Royale.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationFramework.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/PresentationUI.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/ReachFramework.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.CodeDom.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Configuration.ConfigurationManager.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Design.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.EventLog.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Diagnostics.PerformanceCounter.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.DirectoryServices.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Common.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.Design.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Drawing.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.IO.Packaging.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Printing.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Resources.Extensions.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Pkcs.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.ProtectedData.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Cryptography.Xml.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Security.Permissions.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Threading.AccessControl.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Controls.Ribbon.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Extensions.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.Editors.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Design.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.Primitives.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Forms.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Input.Manipulations.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Windows.Presentation.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/System.Xaml.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClient.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationClientSideProviders.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationProvider.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/UIAutomationTypes.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsBase.dll | +| [...]/microsoft.windowsdesktop.app.ref/8.0.1/ref/net8.0/WindowsFormsIntegration.dll | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.ql b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.ql new file mode 100644 index 000000000000..d47b596f0afd --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.ql @@ -0,0 +1,11 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = "[...]" + s.substring(s.indexOf("microsoft.windowsdesktop.app.ref") - 1, s.length()) + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.expected b/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.expected new file mode 100644 index 000000000000..f87af9b7599d --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.expected @@ -0,0 +1,18 @@ +| All Nuget feeds reachable | 1.0 | +| Failed project restore with package source error | 0.0 | +| Failed solution restore with package source error | 0.0 | +| NuGet feed responsiveness checked | 1.0 | +| Project files on filesystem | 1.0 | +| Reachable fallback Nuget feed count | 1.0 | +| Resource extraction enabled | 0.0 | +| Restored .NET framework variants | 1.0 | +| Restored projects through solution files | 0.0 | +| Solution files on filesystem | 0.0 | +| Source files generated | 1.0 | +| Source files on filesystem | 3.0 | +| Successfully restored project files | 1.0 | +| Successfully restored solution files | 0.0 | +| Unresolved references | 0.0 | +| UseWPF set | 0.0 | +| UseWindowsForms set | 1.0 | +| WebView extraction enabled | 1.0 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.ql b/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.ql new file mode 100644 index 000000000000..a96c2fd99a69 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/CompilationInfo.ql @@ -0,0 +1,16 @@ +import csharp +import semmle.code.csharp.commons.Diagnostics + +query predicate compilationInfo(string key, float value) { + key != "Resolved references" and + key != "Resolved assembly conflicts" and + not key.matches("Compiler diagnostic count for%") and + exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | + key = infoKey and + value = infoValue.toFloat() + or + not exists(infoValue.toFloat()) and + key = infoKey + ": " + infoValue and + value = 1 + ) +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Form1.Designer.cs b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Form1.Designer.cs new file mode 100644 index 000000000000..841a32410f7e --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Form1.Designer.cs @@ -0,0 +1,38 @@ +namespace winforms; + +partial class Form1 +{ + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "Form1"; + } + + #endregion +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Form1.cs b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Form1.cs new file mode 100644 index 000000000000..834b9ce772b0 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Form1.cs @@ -0,0 +1,9 @@ +namespace winforms; + +public partial class Form1 : Form +{ + public Form1() + { + InitializeComponent(); + } +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Program.cs b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Program.cs new file mode 100644 index 000000000000..822a48b121e2 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Program.cs @@ -0,0 +1,16 @@ +namespace winforms; + +static class Program +{ + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new Form1()); + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json b/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json new file mode 100644 index 000000000000..5c3fd64fbd12 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "8.0.101" + } +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/test.py b/csharp/ql/integration-tests/all-platforms/standalone_winforms/test.py new file mode 100644 index 000000000000..8609eca2f16f --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/test.py @@ -0,0 +1,3 @@ +from create_database_utils import * + +run_codeql_database_create(lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/winforms.csproj b/csharp/ql/integration-tests/all-platforms/standalone_winforms/winforms.csproj new file mode 100644 index 000000000000..bcc83124518c --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/winforms.csproj @@ -0,0 +1,11 @@ + + + + WinExe + net8.0-windows + enable + true + enable + + + \ No newline at end of file diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 6abef1b2c046..e8db03319514 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/1.0.4.md b/csharp/ql/lib/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 610d0bfc41d9..225138e2a810 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 1.0.3 +version: 1.0.4 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/lib/semmle/code/csharp/Location.qll b/csharp/ql/lib/semmle/code/csharp/Location.qll index eb6a30e7d35d..9b2cea470ed7 100644 --- a/csharp/ql/lib/semmle/code/csharp/Location.qll +++ b/csharp/ql/lib/semmle/code/csharp/Location.qll @@ -110,12 +110,21 @@ class SourceLocation extends Location, @location_default { bindingset[version] private int versionField(string version, int field) { - exists(string format | - format = "(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)" or - format = "(\\d+)\\.(\\d+)\\.(\\d+)" or - format = "(\\d+)\\.(\\d+)" + exists(string format, int i | + format = "(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)|" + "(\\d+)\\.(\\d+)\\.(\\d+)|" + "(\\d+)\\.(\\d+)" and + result = version.regexpCapture(format, i).toInt() | - result = version.regexpCapture(format, field).toInt() + i = [1, 5, 8] and + field = 1 + or + i = [2, 6, 9] and + field = 2 + or + i = [3, 7] and + field = 3 + or + i = 4 and + field = 4 ) and result >= 0 and result <= 255 @@ -123,8 +132,19 @@ private int versionField(string version, int field) { /** An assembly version, for example `4.0.0.0` or `4.5`. */ class Version extends string { + private int major; + bindingset[this] - Version() { exists(versionField(this, 1)) } + Version() { major = versionField(this, 1) } + + bindingset[this] + private int getVersionField(int field) { + field = 1 and + result = major + or + field in [2 .. 4] and + result = versionField(this, field) + } /** * Gets field `field` of this version. @@ -132,13 +152,47 @@ class Version extends string { */ bindingset[this] int getField(int field) { - field in [1 .. 4] and - if exists(versionField(this, field)) then result = versionField(this, field) else result = 0 + result = this.getVersionField(field) + or + field in [2 .. 4] and + not exists(this.getVersionField(field)) and + result = 0 + } + + bindingset[this] + private string getCanonicalizedField(int field) { + exists(string s, int length | + s = this.getVersionField(field).toString() and + length = s.length() + | + // make each field consist of 3 digits + result = concat(int i | i in [1 .. 3 - length] | "0") + s + ) + } + + /** + * Gets a canonicalized version of this string, where lexicographical ordering + * corresponds to version ordering. + */ + bindingset[this] + string getCanonicalizedVersion() { + exists(string res, int length | + res = + strictconcat(int field, string s | + s = this.getCanonicalizedField(field) + | + s, "." order by field + ) and + length = res.length() + | + // make each canonicalized version consist of 4 chunks of 3 digits separated by a dot + result = res + concat(int i | i = [1 .. 15 - length] / 4 and i > 0 | ".000") + ) } /** Gets the major version, for example `1` in `1.2.3.4`. */ bindingset[this] - int getMajor() { result = this.getField(1) } + int getMajor() { result = major } /** Gets the major revision, for example `2` in `1.2.3.4`. */ bindingset[this] @@ -164,9 +218,7 @@ class Version extends string { */ bindingset[this, other] predicate isEarlierThan(Version other) { - exists(int i | this.getField(i) < other.getField(i) | - forall(int j | j in [1 .. i - 1] | this.getField(j) = other.getField(j)) - ) + this.getCanonicalizedVersion() < other.getCanonicalizedVersion() } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index 287c6a6b525e..d67816e4c879 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -191,16 +191,6 @@ class DataFlowCallable extends TDataFlowCallable { or result = this.asCapturedVariable().getLocation() } - - /** Gets a best-effort total ordering. */ - int totalorder() { - this = - rank[result](DataFlowCallable c, string file, int startline, int startcolumn | - c.getLocation().hasLocationInfo(file, startline, startcolumn, _, _) - | - c order by file, startline, startcolumn - ) - } } /** A call relevant for data flow. */ @@ -247,16 +237,6 @@ abstract class DataFlowCall extends TDataFlowCall { ) { this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } - - /** Gets a best-effort total ordering. */ - int totalorder() { - this = - rank[result](DataFlowCall c, int startline, int startcolumn | - c.hasLocationInfo(_, startline, startcolumn, _, _) - | - c order by startline, startcolumn - ) - } } /** A non-delegate C# call relevant for data flow. */ diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 5817af3c1327..4ad804e50492 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -2379,15 +2379,6 @@ class NodeRegion instanceof ControlFlow::BasicBlock { string toString() { result = "NodeRegion" } predicate contains(Node n) { this = n.getControlFlowNode().getBasicBlock() } - - int totalOrder() { - this = - rank[result](ControlFlow::BasicBlock b, int startline, int startcolumn | - b.getLocation().hasLocationInfo(_, startline, startcolumn, _, _) - | - b order by startline, startcolumn - ) - } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/security/xml/InsecureXMLQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/xml/InsecureXMLQuery.qll index 25793a8a71cc..ba98888fa6fc 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/xml/InsecureXMLQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/xml/InsecureXMLQuery.qll @@ -5,6 +5,19 @@ import csharp private import semmle.code.csharp.commons.TargetFramework +pragma[nomagic] +private float getAssemblyVersion(Assembly a) { + result = a.getVersion().regexpCapture("([0-9]+\\.[0-9]+).*", 1).toFloat() and + // This method is only accurate when we're looking at versions before 4.0. + result < 4.0 +} + +pragma[nomagic] +private Version getTargetFrameworkVersion(TargetFrameworkAttribute tfa) { + tfa.isNetFramework() and + result = tfa.getFrameworkVersion() +} + /** * Holds if the type `t` is in an assembly that has been compiled against a .NET framework version * before the given version. @@ -14,21 +27,16 @@ private predicate isNetFrameworkBefore(Type t, string version) { // For assemblies compiled against framework versions before 4 the TargetFrameworkAttribute // will not be present. In this case, we can revert back to the assembly version, which may not // contain full minor version information. - exists(string assemblyVersion | - assemblyVersion = - t.getALocation().(Assembly).getVersion().regexpCapture("([0-9]+\\.[0-9]+).*", 1) - | - assemblyVersion.toFloat() < version.toFloat() and - // This method is only accurate when we're looking at versions before 4.0. - assemblyVersion.toFloat() < 4.0 + exists(float assemblyVersion | + assemblyVersion = getAssemblyVersion(t.getALocation()) and + assemblyVersion < version.toFloat() ) or // For 4.0 and above the TargetFrameworkAttribute should be present to provide detailed version // information. exists(TargetFrameworkAttribute tfa | tfa.hasElement(t) and - tfa.isNetFramework() and - tfa.getFrameworkVersion().isEarlierThan(version) + getTargetFrameworkVersion(tfa).isEarlierThan(version) ) } @@ -173,7 +181,7 @@ module XmlReader { reason = "DTD processing is enabled by default in versions < 4.0" and evidence = this and not exists(this.getSettings()) and - isNetFrameworkBefore(this.(MethodCall).getTarget().getDeclaringType(), "4.0") + isNetFrameworkBefore(this.getTarget().getDeclaringType(), "4.0") or // bad settings flow here exists(ObjectCreation settings | diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 5edbf9229620..0b2583745f1e 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/csharp/ql/src/change-notes/released/1.0.4.md b/csharp/ql/src/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 562d99ed6b8f..73aed8329dec 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.3 +version: 1.0.4 groups: - csharp - queries diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll index 36cb62e655fc..517531ecfbf7 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll @@ -130,7 +130,13 @@ class SinkTargetApi extends SourceOrSinkTargetApi { * A class of callables that are potentially relevant for generating source models. */ class SourceTargetApi extends SourceOrSinkTargetApi { - SourceTargetApi() { not hasManualSourceModel(this) } + SourceTargetApi() { + not hasManualSourceModel(this) and + // Do not generate source models for overridable callables + // as virtual dispatch implies that too many methods + // will be considered sources. + not this.(Overridable).overridesOrImplements(_) + } } /** diff --git a/csharp/ql/test/utils/modelgenerator/dataflow/Sources.cs b/csharp/ql/test/utils/modelgenerator/dataflow/Sources.cs index 855f70185572..3165dfa2f904 100644 --- a/csharp/ql/test/utils/modelgenerator/dataflow/Sources.cs +++ b/csharp/ql/test/utils/modelgenerator/dataflow/Sources.cs @@ -52,25 +52,38 @@ public bool WrapConsoleReadLineGetBool() return s == "hello"; } - public class MyConsoleReader + public abstract class ValueReader { - // source=Sources;NewSources+MyConsoleReader;false;ToString;();;ReturnValue;local;df-generated - // neutral=Sources;NewSources+MyConsoleReader;ToString;();summary;df-generated - public override string ToString() + // neutral=Sources;NewSources+ValueReader;GetValue;();summary;df-generated + public abstract string GetValue(); + } + + public class MyConsoleReader : ValueReader + { + // neutral=Sources;NewSources+MyConsoleReader;GetValue;();summary;df-generated + public override string GetValue() { return Console.ReadLine(); } } + public class MyOtherReader : ValueReader + { + // neutral=Sources;NewSources+MyOtherReader;GetValue;();summary;df-generated + public override string GetValue() + { + return ""; + } + } - public class MyContainer + public class MyContainer where T : ValueReader { public T Value { get; set; } - // summary=Sources;NewSources+MyContainer;false;Read;();;Argument[this];ReturnValue;taint;df-generated + // neutral=Sources;NewSources+MyContainer;Read;();summary;df-generated public string Read() { - return Value.ToString(); + return Value.GetValue(); } } @@ -97,7 +110,6 @@ public abstract class DataReader public class DataReaderKind1 : DataReader { - // source=Sources;NewSources+DataReaderKind1;true;Read;();;ReturnValue;source-kind-1;df-generated // neutral=Sources;NewSources+DataReaderKind1;Read;();summary;df-generated public override string Read() { @@ -105,13 +117,31 @@ public override string Read() } } - public class DataReaderKind2 : DataReader + public sealed class DataReaderKind2 : DataReader { - // source=Sources;NewSources+DataReaderKind2;true;Read;();;ReturnValue;source-kind-2;df-generated // neutral=Sources;NewSources+DataReaderKind2;Read;();summary;df-generated public override string Read() { return Source2(); } } + + public class C1 + { + // neutral=Sources;NewSources+C1;ToString;();summary;df-generated + public override string ToString() + { + return Source1(); + } + } + + public sealed class C2 + { + // neutral=Sources;NewSources+C2;ToString;();summary;df-generated + public override string ToString() + { + return Source1(); + } + } + } diff --git a/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst b/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst index f903b5389267..9921ba9734b7 100644 --- a/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst +++ b/docs/codeql/codeql-language-guides/abstract-syntax-tree-classes-for-working-with-java-programs.rst @@ -7,8 +7,6 @@ CodeQL has a large selection of classes for representing the abstract syntax tre .. include:: ../reusables/abstract-syntax-tree.rst -.. include:: ../reusables/kotlin-beta-note.rst - .. include:: ../reusables/kotlin-java-differences.rst Statement classes @@ -385,4 +383,4 @@ Further reading .. _TypeLiteral: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$TypeLiteral.html .. _ClassInstanceExpr: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$ClassInstanceExpr.html .. _ArrayInit: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Expr.qll/type.Expr$ArrayInit.html -.. _Annotation: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Annotation.qll/type.Annotation$Annotation.html \ No newline at end of file +.. _Annotation: https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Annotation.qll/type.Annotation$Annotation.html diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst index 1a352d4e4ec6..0c6453d89936 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst @@ -5,8 +5,6 @@ Analyzing data flow in Java and Kotlin You can use CodeQL to track the flow of data through a Java/Kotlin program to its use. -.. include:: ../reusables/kotlin-beta-note.rst - .. include:: ../reusables/kotlin-java-differences.rst About this article diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-swift.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-swift.rst index b1e7a1593e87..76cb8da18a15 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-swift.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-swift.rst @@ -5,8 +5,6 @@ Analyzing data flow in Swift You can use CodeQL to track the flow of data through a Swift program to places where the data is used. -.. include:: ../reusables/swift-beta-note.rst - About this article ------------------ diff --git a/docs/codeql/codeql-language-guides/annotations-in-java.rst b/docs/codeql/codeql-language-guides/annotations-in-java.rst index 083cf471ef86..09e3290b5fdd 100644 --- a/docs/codeql/codeql-language-guides/annotations-in-java.rst +++ b/docs/codeql/codeql-language-guides/annotations-in-java.rst @@ -5,8 +5,6 @@ Annotations in Java and Kotlin CodeQL databases of Java/Kotlin projects contain information about all annotations attached to program elements. -.. include:: ../reusables/kotlin-beta-note.rst - About working with annotations ------------------------------ diff --git a/docs/codeql/codeql-language-guides/basic-query-for-swift-code.rst b/docs/codeql/codeql-language-guides/basic-query-for-swift-code.rst index fdaa1ec62908..9e146513a20c 100644 --- a/docs/codeql/codeql-language-guides/basic-query-for-swift-code.rst +++ b/docs/codeql/codeql-language-guides/basic-query-for-swift-code.rst @@ -5,7 +5,6 @@ Basic query for Swift code Learn to write and run a simple CodeQL query using Visual Studio Code with the CodeQL extension. -.. include:: ../reusables/swift-beta-note.rst .. include:: ../reusables/vs-code-basic-instructions/setup-to-run-queries.rst About the query diff --git a/docs/codeql/codeql-language-guides/codeql-for-java.rst b/docs/codeql/codeql-language-guides/codeql-for-java.rst index 0b4c3cb822a6..f2bf306519b8 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-java.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-java.rst @@ -5,9 +5,6 @@ CodeQL for Java and Kotlin Experiment and learn how to write effective and efficient queries for CodeQL databases generated from Java and Kotlin codebases. -.. include:: ../reusables/kotlin-beta-note.rst - - .. pull-quote:: Enabling Kotlin support CodeQL treats Java and Kotlin as parts of the same language, so to enable Kotlin support you should enable ``java-kotlin`` as a language. diff --git a/docs/codeql/codeql-language-guides/codeql-for-swift.rst b/docs/codeql/codeql-language-guides/codeql-for-swift.rst index 132ab004d6f0..5d05739829f8 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-swift.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-swift.rst @@ -5,8 +5,6 @@ CodeQL for Swift Experiment and learn how to write effective and efficient queries for CodeQL databases generated from Swift codebases. -.. include:: ../reusables/swift-beta-note.rst - .. toctree:: :hidden: diff --git a/docs/codeql/codeql-language-guides/codeql-library-for-java.rst b/docs/codeql/codeql-language-guides/codeql-library-for-java.rst index c122ab5f7e37..1dd1c99b0120 100644 --- a/docs/codeql/codeql-language-guides/codeql-library-for-java.rst +++ b/docs/codeql/codeql-language-guides/codeql-library-for-java.rst @@ -5,8 +5,6 @@ CodeQL library for Java and Kotlin When you're analyzing a Java/Kotlin program, you can make use of the large collection of classes in the CodeQL library for Java/Kotlin. -.. include:: ../reusables/kotlin-beta-note.rst - About the CodeQL library for Java and Kotlin -------------------------------------------- diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-java-and-kotlin.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-java-and-kotlin.rst index ec396d2932bb..7f0a41b3040e 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-java-and-kotlin.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-java-and-kotlin.rst @@ -5,8 +5,6 @@ Customizing library models for Java and Kotlin You can model the methods and callables that control data flow in any framework or library. This is especially useful for custom frameworks or niche libraries, that are not supported by the standard CodeQL libraries. -.. include:: ../reusables/kotlin-beta-note.rst - .. include:: ../reusables/beta-note-customizing-library-models.rst About this article diff --git a/docs/codeql/codeql-language-guides/overflow-prone-comparisons-in-java.rst b/docs/codeql/codeql-language-guides/overflow-prone-comparisons-in-java.rst index a667c670fbe4..635096671f9d 100644 --- a/docs/codeql/codeql-language-guides/overflow-prone-comparisons-in-java.rst +++ b/docs/codeql/codeql-language-guides/overflow-prone-comparisons-in-java.rst @@ -5,8 +5,6 @@ Overflow-prone comparisons in Java and Kotlin You can use CodeQL to check for comparisons in Java/Kotlin code where one side of the comparison is prone to overflow. -.. include:: ../reusables/kotlin-beta-note.rst - About this article ------------------ diff --git a/docs/codeql/codeql-language-guides/types-in-java.rst b/docs/codeql/codeql-language-guides/types-in-java.rst index 733a177c65b3..bed021489ea0 100644 --- a/docs/codeql/codeql-language-guides/types-in-java.rst +++ b/docs/codeql/codeql-language-guides/types-in-java.rst @@ -5,8 +5,6 @@ Types in Java and Kotlin You can use CodeQL to find out information about data types used in Java/Kotlin code. This allows you to write queries to identify specific type-related issues. -.. include:: ../reusables/kotlin-beta-note.rst - About working with Java types ----------------------------- diff --git a/docs/codeql/codeql-language-guides/working-with-source-locations.rst b/docs/codeql/codeql-language-guides/working-with-source-locations.rst index 350e38097ab7..647c3e446d58 100644 --- a/docs/codeql/codeql-language-guides/working-with-source-locations.rst +++ b/docs/codeql/codeql-language-guides/working-with-source-locations.rst @@ -5,8 +5,6 @@ Working with source locations You can use the location of entities within Java/Kotlin code to look for potential errors. Locations allow you to deduce the presence, or absence, of white space which, in some cases, may indicate a problem. -.. include:: ../reusables/kotlin-beta-note.rst - About source locations ---------------------- diff --git a/docs/codeql/codeql-overview/system-requirements.rst b/docs/codeql/codeql-overview/system-requirements.rst index b916cfc67e02..cc46db60c35b 100644 --- a/docs/codeql/codeql-overview/system-requirements.rst +++ b/docs/codeql/codeql-overview/system-requirements.rst @@ -12,8 +12,6 @@ Supported platforms .. include:: ../reusables/supported-platforms.rst -.. include:: ../reusables/kotlin-beta-note.rst - Additional software requirements ################################ diff --git a/docs/codeql/query-help/codeql-cwe-coverage.rst b/docs/codeql/query-help/codeql-cwe-coverage.rst index 54219ea8f3b3..ab78764e6aab 100644 --- a/docs/codeql/query-help/codeql-cwe-coverage.rst +++ b/docs/codeql/query-help/codeql-cwe-coverage.rst @@ -3,9 +3,6 @@ CodeQL CWE coverage You can view the full coverage of MITRE's Common Weakness Enumeration (CWE) or coverage by language for the latest release of CodeQL. -.. include:: ../reusables/kotlin-beta-note.rst -.. include:: ../reusables/swift-beta-note.rst - About CWEs ########## diff --git a/docs/codeql/query-help/index.rst b/docs/codeql/query-help/index.rst index 05d53a2cddf9..81dc04b9f8c5 100644 --- a/docs/codeql/query-help/index.rst +++ b/docs/codeql/query-help/index.rst @@ -12,9 +12,6 @@ View the query help for the queries included in the ``default``, ``security-exte - :doc:`CodeQL query help for Ruby ` - :doc:`CodeQL query help for Swift ` -.. include:: ../reusables/kotlin-beta-note.rst -.. include:: ../reusables/swift-beta-note.rst - .. pull-quote:: Information Each query help article includes: diff --git a/docs/codeql/reusables/kotlin-beta-note.rst b/docs/codeql/reusables/kotlin-beta-note.rst deleted file mode 100644 index d05d137a13e3..000000000000 --- a/docs/codeql/reusables/kotlin-beta-note.rst +++ /dev/null @@ -1,4 +0,0 @@ - .. pull-quote:: Note - - CodeQL analysis for Kotlin is currently in beta. During the beta, analysis of Kotlin code, - and the accompanying documentation, will not be as comprehensive as for other languages. \ No newline at end of file diff --git a/docs/codeql/reusables/supported-frameworks.rst b/docs/codeql/reusables/supported-frameworks.rst index ebc17dd90cc5..4730830ccd76 100644 --- a/docs/codeql/reusables/supported-frameworks.rst +++ b/docs/codeql/reusables/supported-frameworks.rst @@ -97,8 +97,6 @@ and the CodeQL library pack ``codeql/go-all`` (`changelog `__, `source `__) and the CodeQL library pack ``codeql/java-all`` (`changelog `__, `source `__). @@ -287,8 +285,6 @@ and the CodeQL library pack ``codeql/ruby-all`` (`changelog `__, `source `__) and the CodeQL library pack ``codeql/swift-all`` (`changelog `__, `source `__). diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 2b366a619378..241b2eef8766 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -20,12 +20,12 @@ Java,"Java 7 to 22 [5]_","javac (OpenJDK and Oracle JDK), Eclipse compiler for Java (ECJ) [6]_",``.java`` - Kotlin [7]_,"Kotlin 1.5.0 to 2.0.0\ *x*","kotlinc",``.kt`` - JavaScript,ECMAScript 2022 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [8]_" - Python [9]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12",Not applicable,``.py`` - Ruby [10]_,"up to 3.3",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``" - Swift [11]_,"Swift 5.4-5.10","Swift compiler","``.swift``" - TypeScript [12]_,"2.6-5.5",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" + Kotlin,"Kotlin 1.5.0 to 2.0.2\ *x*","kotlinc",``.kt`` + JavaScript,ECMAScript 2022 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [7]_" + Python [8]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12",Not applicable,``.py`` + Ruby [9]_,"up to 3.3",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``" + Swift [10]_,"Swift 5.4-5.10","Swift compiler","``.swift``" + TypeScript [11]_,"2.6-5.5",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" .. container:: footnote-group @@ -35,9 +35,8 @@ .. [4] Support for the Arm Compiler (armcc) is preliminary. .. [5] Builds that execute on Java 7 to 22 can be analyzed. The analysis understands Java 22 standard language features. .. [6] ECJ is supported when the build invokes it via the Maven Compiler plugin or the Takari Lifecycle plugin. - .. [7] Kotlin support is currently in beta. - .. [8] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files. - .. [9] The extractor requires Python 3 to run. To analyze Python 2.7 you should install both versions of Python. - .. [10] Requires glibc 2.17. - .. [11] Swift support is currently in beta. Support for the analysis of Swift requires macOS or Linux. - .. [12] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default. + .. [7] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files. + .. [8] The extractor requires Python 3 to run. To analyze Python 2.7 you should install both versions of Python. + .. [9] Requires glibc 2.17. + .. [10] Support for the analysis of Swift requires macOS or Linux. + .. [11] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default. diff --git a/docs/codeql/reusables/swift-beta-note.rst b/docs/codeql/reusables/swift-beta-note.rst deleted file mode 100644 index 273366833409..000000000000 --- a/docs/codeql/reusables/swift-beta-note.rst +++ /dev/null @@ -1,4 +0,0 @@ - .. pull-quote:: Note - - CodeQL analysis for Swift is currently in beta. During the beta, analysis of Swift code, - and the accompanying documentation, will not be as comprehensive as for other languages. \ No newline at end of file diff --git a/go/documentation/library-coverage/coverage.csv b/go/documentation/library-coverage/coverage.csv index e7b113d75e54..7d9294b424af 100644 --- a/go/documentation/library-coverage/coverage.csv +++ b/go/documentation/library-coverage/coverage.csv @@ -39,46 +39,54 @@ github.com/astaxie/beego,,6,7,,,6,7, github.com/astaxie/beego/context,,15,1,,,15,1, github.com/astaxie/beego/utils,,,13,,,,13, github.com/beego/beego,,6,7,,,6,7, -github.com/beego/beego/context,,15,,,,15,, +github.com/beego/beego/context,,15,1,,,15,1, github.com/beego/beego/core/utils,,,13,,,,13, github.com/beego/beego/server/web,,6,7,,,6,7, github.com/beego/beego/server/web/context,,15,1,,,15,1, +github.com/beego/beego/utils,,,13,,,,13, github.com/couchbase/gocb,,,18,,,,18, github.com/couchbaselabs/gocb,,,18,,,,18, github.com/cristalhq/jwt,1,,,1,,,, github.com/dgrijalva/jwt-go,3,,9,2,1,,9, -github.com/elazarl/goproxy,,,2,,,,2, +github.com/elazarl/goproxy,,2,2,,,2,2, +github.com/emicklei/go-restful,,7,,,,7,, github.com/evanphx/json-patch,,,12,,,,12, github.com/form3tech-oss/jwt-go,2,,,2,,,, -github.com/gin-gonic/gin,,,2,,,,2, +github.com/gin-gonic/gin,,46,2,,,46,2, +github.com/go-chi/chi,,3,,,,3,, github.com/go-chi/jwtauth,1,,,1,,,, github.com/go-jose/go-jose/jwt,1,,4,,1,,4, github.com/go-kit/kit/auth/jwt,1,,,1,,,, github.com/go-pg/pg/orm,,,6,,,,6, +github.com/gobwas/ws,,2,,,,2,, github.com/golang-jwt/jwt,3,,11,2,1,,11, github.com/golang/protobuf/proto,,,4,,,,4, +github.com/gorilla/mux,,1,,,,1,, +github.com/gorilla/websocket,,3,,,,3,, github.com/json-iterator/go,,,4,,,,4, github.com/kataras/iris/middleware/jwt,1,,,1,,,, github.com/kataras/jwt,5,,,5,,,, -github.com/labstack/echo,,,2,,,,2, +github.com/labstack/echo,,12,2,,,12,2, github.com/lestrrat-go/jwx,1,,,1,,,, github.com/lestrrat-go/jwx/jwk,1,,,1,,,, github.com/lestrrat/go-jwx/jwk,1,,,1,,,, github.com/ory/fosite/token/jwt,2,,,2,,,, -github.com/revel/revel,,,10,,,,10, -github.com/robfig/revel,,,10,,,,10, +github.com/revel/revel,,23,10,,,23,10, +github.com/robfig/revel,,23,10,,,23,10, github.com/sendgrid/sendgrid-go/helpers/mail,,,1,,,,1, -github.com/valyala/fasthttp,,,5,,,,5, +github.com/square/go-jose/jwt,1,,4,,1,,4, +github.com/valyala/fasthttp,,50,5,,,50,5, go.uber.org/zap,,,11,,,,11, golang.org/x/net/context,,,5,,,,5, golang.org/x/net/html,,,16,,,,16, +golang.org/x/net/websocket,,2,,,,2,, google.golang.org/protobuf/internal/encoding/text,,,1,,,,1, google.golang.org/protobuf/internal/impl,,,2,,,,2, google.golang.org/protobuf/proto,,,8,,,,8, google.golang.org/protobuf/reflect/protoreflect,,,1,,,,1, gopkg.in/couchbase/gocb,,,18,,,,18, gopkg.in/macaron,,12,1,,,12,1, -gopkg.in/square/go-jose.v2/jwt,1,,4,,1,,4, +gopkg.in/square/go-jose/jwt,1,,4,,1,,4, gopkg.in/yaml,,,9,,,,9, html,,,2,,,,2, html/template,,,6,,,,6, @@ -93,11 +101,12 @@ mime,,,5,,,,5, mime/multipart,,,8,,,,8, mime/quotedprintable,,,1,,,,1, net,,,20,,,,20, -net/http,,8,22,,,8,22, +net/http,,16,22,,,16,22, net/http/httputil,,,10,,,,10, net/mail,,,6,,,,6, net/textproto,,,19,,,,19, net/url,,,23,,,,23, +nhooyr.io/websocket,,2,,,,2,, os,,,4,,,,4, path,,,5,,,,5, path/filepath,,,13,,,,13, diff --git a/go/documentation/library-coverage/coverage.rst b/go/documentation/library-coverage/coverage.rst index 5d6fd63fb642..51158f84cb02 100644 --- a/go/documentation/library-coverage/coverage.rst +++ b/go/documentation/library-coverage/coverage.rst @@ -9,23 +9,26 @@ Go framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total) `Couchbase official client(gocb) `_,"``github.com/couchbase/gocb*``, ``gopkg.in/couchbase/gocb*``",,36, `Couchbase unofficial client `_,``github.com/couchbaselabs/gocb*``,,18, - `Echo `_,``github.com/labstack/echo*``,,2, + `Echo `_,``github.com/labstack/echo*``,12,2, `Fosite `_,``github.com/ory/fosite*``,,,2 - `Gin `_,``github.com/gin-gonic/gin*``,,2, - `Go JOSE `_,"``github.com/go-jose/go-jose*``, ``github.com/square/go-jose*``, ``gopkg.in/square/go-jose*``",,8,2 + `Gin `_,``github.com/gin-gonic/gin*``,46,2, + `Go JOSE `_,"``github.com/go-jose/go-jose*``, ``github.com/square/go-jose*``, ``gopkg.in/square/go-jose*``",,12,3 `Go kit `_,``github.com/go-kit/kit*``,,,1 `Iris `_,``github.com/kataras/iris*``,,,1 `Kubernetes `_,"``k8s.io/api*``, ``k8s.io/apimachinery*``",,57, `Macaron `_,``gopkg.in/macaron*``,12,1, - `Revel `_,"``github.com/revel/revel*``, ``github.com/robfig/revel*``",,20, + `Revel `_,"``github.com/revel/revel*``, ``github.com/robfig/revel*``",46,20, `SendGrid `_,``github.com/sendgrid/sendgrid-go*``,,1, - `Standard library `_,"````, ``archive/*``, ``bufio``, ``bytes``, ``cmp``, ``compress/*``, ``container/*``, ``context``, ``crypto``, ``crypto/*``, ``database/*``, ``debug/*``, ``embed``, ``encoding``, ``encoding/*``, ``errors``, ``expvar``, ``flag``, ``fmt``, ``go/*``, ``hash``, ``hash/*``, ``html``, ``html/*``, ``image``, ``image/*``, ``index/*``, ``io``, ``io/*``, ``log``, ``log/*``, ``maps``, ``math``, ``math/*``, ``mime``, ``mime/*``, ``net``, ``net/*``, ``os``, ``os/*``, ``path``, ``path/*``, ``plugin``, ``reflect``, ``reflect/*``, ``regexp``, ``regexp/*``, ``slices``, ``sort``, ``strconv``, ``strings``, ``sync``, ``sync/*``, ``syscall``, ``syscall/*``, ``testing``, ``testing/*``, ``text/*``, ``time``, ``time/*``, ``unicode``, ``unicode/*``, ``unsafe``",8,584, - `beego `_,"``github.com/astaxie/beego*``, ``github.com/beego/beego*``",63,49, + `Standard library `_,"````, ``archive/*``, ``bufio``, ``bytes``, ``cmp``, ``compress/*``, ``container/*``, ``context``, ``crypto``, ``crypto/*``, ``database/*``, ``debug/*``, ``embed``, ``encoding``, ``encoding/*``, ``errors``, ``expvar``, ``flag``, ``fmt``, ``go/*``, ``hash``, ``hash/*``, ``html``, ``html/*``, ``image``, ``image/*``, ``index/*``, ``io``, ``io/*``, ``log``, ``log/*``, ``maps``, ``math``, ``math/*``, ``mime``, ``mime/*``, ``net``, ``net/*``, ``os``, ``os/*``, ``path``, ``path/*``, ``plugin``, ``reflect``, ``reflect/*``, ``regexp``, ``regexp/*``, ``slices``, ``sort``, ``strconv``, ``strings``, ``sync``, ``sync/*``, ``syscall``, ``syscall/*``, ``testing``, ``testing/*``, ``text/*``, ``time``, ``time/*``, ``unicode``, ``unicode/*``, ``unsafe``",16,584, + `beego `_,"``github.com/astaxie/beego*``, ``github.com/beego/beego*``",63,63, + `chi `_,``github.com/go-chi/chi*``,3,, `cristalhq/jwt `_,``github.com/cristalhq/jwt*``,,,1 - `fasthttp `_,``github.com/valyala/fasthttp*``,,5, + `fasthttp `_,``github.com/valyala/fasthttp*``,50,5, `go-pg `_,``github.com/go-pg/pg*``,,6, - `golang.org/x/net `_,``golang.org/x/net*``,,21, - `goproxy `_,``github.com/elazarl/goproxy*``,,2, + `go-restful `_,``github.com/emicklei/go-restful*``,7,, + `golang.org/x/net `_,``golang.org/x/net*``,2,21, + `goproxy `_,``github.com/elazarl/goproxy*``,2,2, + `gorilla/mux `_,``github.com/gorilla/mux*``,1,, `json-iterator `_,``github.com/json-iterator/go*``,,4, `jsonpatch `_,``github.com/evanphx/json-patch*``,,12, `jwt-go `_,"``github.com/golang-jwt/jwt*``, ``github.com/form3tech-oss/jwt-go*``, ``github.com/dgrijalva/jwt-go*``",,20,8 @@ -35,5 +38,6 @@ Go framework & library support `protobuf `_,"``github.com/golang/protobuf*``, ``google.golang.org/protobuf*``",,16, `yaml `_,``gopkg.in/yaml*``,,9, `zap `_,``go.uber.org/zap*``,,11, - Totals,,83,884,24 + Others,"``github.com/gobwas/ws``, ``github.com/gorilla/websocket``, ``nhooyr.io/websocket``",7,, + Totals,,267,902,25 diff --git a/go/documentation/library-coverage/frameworks.csv b/go/documentation/library-coverage/frameworks.csv index e2a8c3f06160..868732b7ec11 100644 --- a/go/documentation/library-coverage/frameworks.csv +++ b/go/documentation/library-coverage/frameworks.csv @@ -2,6 +2,7 @@ Framework name,URL,Package prefixes Standard library,https://pkg.go.dev/std, archive/* bufio bytes cmp compress/* container/* context crypto crypto/* database/* debug/* embed encoding encoding/* errors expvar flag fmt go/* hash hash/* html html/* image image/* index/* io io/* log log/* maps math math/* mime mime/* net net/* os os/* path path/* plugin reflect reflect/* regexp regexp/* slices sort strconv strings sync sync/* syscall syscall/* testing testing/* text/* time time/* unicode unicode/* unsafe beego,https://beego.me/,github.com/astaxie/beego* github.com/beego/beego* Couchbase official client(gocb),https://github.com/couchbase/gocb,github.com/couchbase/gocb* gopkg.in/couchbase/gocb* +chi,https://go-chi.io/,github.com/go-chi/chi* Couchbase unofficial client,http://www.github.com/couchbase/go-couchbase,github.com/couchbaselabs/gocb* cristalhq/jwt,https://github.com/cristalhq/jwt,github.com/cristalhq/jwt* Echo,https://echo.labstack.com/,github.com/labstack/echo* @@ -11,8 +12,10 @@ Gin,https://github.com/gin-gonic/gin,github.com/gin-gonic/gin* Go JOSE,https://github.com/go-jose/go-jose,github.com/go-jose/go-jose* github.com/square/go-jose* gopkg.in/square/go-jose* Go kit,https://gokit.io/,github.com/go-kit/kit* go-pg,https://pg.uptrace.dev/,github.com/go-pg/pg* +go-restful,https://github.com/emicklei/go-restful,github.com/emicklei/go-restful* golang.org/x/net,https://pkg.go.dev/golang.org/x/net,golang.org/x/net* goproxy,https://github.com/elazarl/goproxy,github.com/elazarl/goproxy* +gorilla/mux,https://github.com/gorilla/mux,github.com/gorilla/mux* Iris,https://www.iris-go.com/,github.com/kataras/iris* json-iterator,https://github.com/json-iterator/go,github.com/json-iterator/go* jsonpatch,https://github.com/evanphx/json-patch,github.com/evanphx/json-patch* diff --git a/go/extractor/BUILD.bazel b/go/extractor/BUILD.bazel index 8c69d9cc01ff..ded27a11177b 100644 --- a/go/extractor/BUILD.bazel +++ b/go/extractor/BUILD.bazel @@ -21,8 +21,8 @@ go_library( "//go/extractor/toolchain", "//go/extractor/trap", "//go/extractor/util", - "//go/extractor/vendor/golang.org/x/mod/modfile", - "//go/extractor/vendor/golang.org/x/tools/go/packages", + "@org_golang_x_mod//modfile:go_default_library", + "@org_golang_x_tools//go/packages:go_default_library", ], ) diff --git a/go/extractor/dbscheme/BUILD.bazel b/go/extractor/dbscheme/BUILD.bazel index 496a5ccdf49d..379c2fb93d39 100644 --- a/go/extractor/dbscheme/BUILD.bazel +++ b/go/extractor/dbscheme/BUILD.bazel @@ -12,6 +12,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//go/extractor/trap", - "//go/extractor/vendor/golang.org/x/tools/go/packages", + "@org_golang_x_tools//go/packages:go_default_library", ], ) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index 090bd486c3a7..df3a43f80cfa 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -193,10 +193,20 @@ func ExtractWithFlags(buildFlags []string, patterns []string) error { log.Println("Starting to extract packages.") sep := regexp.QuoteMeta(string(filepath.Separator)) - // if a path matches this regexp, we don't want to extract this package. Currently, it checks - // - that the path does not contain a `..` segment, and - // - the path does not contain a `vendor` directory. - noExtractRe := regexp.MustCompile(`.*(^|` + sep + `)(\.\.|vendor)($|` + sep + `).*`) + + // Construct a list of directory segments to exclude from extraction, starting with ".." + excludedDirs := []string{`\.\.`} + + // If CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS is "true", we extract `vendor` directories; + // otherwise (the default) is to exclude them from extraction + includeVendor := os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true" + if !includeVendor { + excludedDirs = append(excludedDirs, "vendor") + } + + // If a path matches this regexp, we don't extract this package. It checks whether the path + // contains one of the `excludedDirs`. + noExtractRe := regexp.MustCompile(`.*(^|` + sep + `)(` + strings.Join(excludedDirs, "|") + `)($|` + sep + `).*`) // extract AST information for all packages packages.Visit(pkgs, nil, func(pkg *packages.Package) { diff --git a/go/extractor/go.mod b/go/extractor/go.mod index 9dafc31bbbe9..bc26e980e3d2 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -2,7 +2,13 @@ module github.com/github/codeql-go/extractor go 1.22.0 +// when updating this, run +// bazel run @rules_go//go -- mod tidy +// when adding or removing dependencies, run +// bazel mod tidy require ( - golang.org/x/mod v0.15.0 - golang.org/x/tools v0.18.0 + golang.org/x/mod v0.19.0 + golang.org/x/tools v0.23.0 ) + +require golang.org/x/sync v0.7.0 // indirect diff --git a/go/extractor/go.sum b/go/extractor/go.sum index dab099e92a05..4ef85421b150 100644 --- a/go/extractor/go.sum +++ b/go/extractor/go.sum @@ -1,6 +1,6 @@ -golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= -golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= diff --git a/go/extractor/project/BUILD.bazel b/go/extractor/project/BUILD.bazel index 9170ff95be35..7a8627ae8b1b 100644 --- a/go/extractor/project/BUILD.bazel +++ b/go/extractor/project/BUILD.bazel @@ -11,7 +11,7 @@ go_library( "//go/extractor/diagnostics", "//go/extractor/toolchain", "//go/extractor/util", - "//go/extractor/vendor/golang.org/x/mod/modfile", + "@org_golang_x_mod//modfile:go_default_library", ], ) @@ -21,6 +21,6 @@ go_test( embed = [":project"], deps = [ "//go/extractor/util", - "//go/extractor/vendor/golang.org/x/mod/modfile", + "@org_golang_x_mod//modfile:go_default_library", ], ) diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index 2a963c18f041..029390432376 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -53,6 +53,7 @@ func GetEnvGoVersion() string { out, err := cmd.CombinedOutput() if err != nil { + log.Println(string(out)) log.Fatalf("Unable to run the go command, is it installed?\nError: %s", err.Error()) } diff --git a/go/extractor/trap/BUILD.bazel b/go/extractor/trap/BUILD.bazel index 6cc7c4983b2e..80973ec94c17 100644 --- a/go/extractor/trap/BUILD.bazel +++ b/go/extractor/trap/BUILD.bazel @@ -14,7 +14,7 @@ go_library( deps = [ "//go/extractor/srcarchive", "//go/extractor/util", - "//go/extractor/vendor/golang.org/x/tools/go/packages", + "@org_golang_x_tools//go/packages:go_default_library", ], ) diff --git a/go/extractor/util/BUILD.bazel b/go/extractor/util/BUILD.bazel index 7c4723e63bf4..41e81a907ef3 100644 --- a/go/extractor/util/BUILD.bazel +++ b/go/extractor/util/BUILD.bazel @@ -10,7 +10,7 @@ go_library( ], importpath = "github.com/github/codeql-go/extractor/util", visibility = ["//visibility:public"], - deps = ["//go/extractor/vendor/golang.org/x/mod/semver"], + deps = ["@org_golang_x_mod//semver:go_default_library"], ) go_test( @@ -20,5 +20,5 @@ go_test( "util_test.go", ], embed = [":util"], - deps = ["//go/extractor/vendor/golang.org/x/mod/semver"], + deps = ["@org_golang_x_mod//semver:go_default_library"], ) diff --git a/go/extractor/vendor/golang.org/x/mod/LICENSE b/go/extractor/vendor/golang.org/x/mod/LICENSE deleted file mode 100644 index 6a66aea5eafe..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/go/extractor/vendor/golang.org/x/mod/PATENTS b/go/extractor/vendor/golang.org/x/mod/PATENTS deleted file mode 100644 index 733099041f84..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/go/extractor/vendor/golang.org/x/mod/internal/lazyregexp/BUILD.bazel b/go/extractor/vendor/golang.org/x/mod/internal/lazyregexp/BUILD.bazel deleted file mode 100644 index deb5dc2b019a..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/internal/lazyregexp/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "lazyregexp", - srcs = ["lazyre.go"], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/mod/internal/lazyregexp", - importpath = "golang.org/x/mod/internal/lazyregexp", - visibility = ["//go/extractor/vendor/golang.org/x/mod:__subpackages__"], -) diff --git a/go/extractor/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go b/go/extractor/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go deleted file mode 100644 index 150f887e7a4b..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package lazyregexp is a thin wrapper over regexp, allowing the use of global -// regexp variables without forcing them to be compiled at init. -package lazyregexp - -import ( - "os" - "regexp" - "strings" - "sync" -) - -// Regexp is a wrapper around [regexp.Regexp], where the underlying regexp will be -// compiled the first time it is needed. -type Regexp struct { - str string - once sync.Once - rx *regexp.Regexp -} - -func (r *Regexp) re() *regexp.Regexp { - r.once.Do(r.build) - return r.rx -} - -func (r *Regexp) build() { - r.rx = regexp.MustCompile(r.str) - r.str = "" -} - -func (r *Regexp) FindSubmatch(s []byte) [][]byte { - return r.re().FindSubmatch(s) -} - -func (r *Regexp) FindStringSubmatch(s string) []string { - return r.re().FindStringSubmatch(s) -} - -func (r *Regexp) FindStringSubmatchIndex(s string) []int { - return r.re().FindStringSubmatchIndex(s) -} - -func (r *Regexp) ReplaceAllString(src, repl string) string { - return r.re().ReplaceAllString(src, repl) -} - -func (r *Regexp) FindString(s string) string { - return r.re().FindString(s) -} - -func (r *Regexp) FindAllString(s string, n int) []string { - return r.re().FindAllString(s, n) -} - -func (r *Regexp) MatchString(s string) bool { - return r.re().MatchString(s) -} - -func (r *Regexp) SubexpNames() []string { - return r.re().SubexpNames() -} - -var inTest = len(os.Args) > 0 && strings.HasSuffix(strings.TrimSuffix(os.Args[0], ".exe"), ".test") - -// New creates a new lazy regexp, delaying the compiling work until it is first -// needed. If the code is being run as part of tests, the regexp compiling will -// happen immediately. -func New(str string) *Regexp { - lr := &Regexp{str: str} - if inTest { - // In tests, always compile the regexps early. - lr.re() - } - return lr -} diff --git a/go/extractor/vendor/golang.org/x/mod/modfile/BUILD.bazel b/go/extractor/vendor/golang.org/x/mod/modfile/BUILD.bazel deleted file mode 100644 index 097bacb107ce..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/modfile/BUILD.bazel +++ /dev/null @@ -1,21 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "modfile", - srcs = [ - "print.go", - "read.go", - "rule.go", - "work.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/mod/modfile", - importpath = "golang.org/x/mod/modfile", - visibility = ["//visibility:public"], - deps = [ - "//go/extractor/vendor/golang.org/x/mod/internal/lazyregexp", - "//go/extractor/vendor/golang.org/x/mod/module", - "//go/extractor/vendor/golang.org/x/mod/semver", - ], -) diff --git a/go/extractor/vendor/golang.org/x/mod/modfile/print.go b/go/extractor/vendor/golang.org/x/mod/modfile/print.go deleted file mode 100644 index 2a0123d4b915..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/modfile/print.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Module file printer. - -package modfile - -import ( - "bytes" - "fmt" - "strings" -) - -// Format returns a go.mod file as a byte slice, formatted in standard style. -func Format(f *FileSyntax) []byte { - pr := &printer{} - pr.file(f) - - // remove trailing blank lines - b := pr.Bytes() - for len(b) > 0 && b[len(b)-1] == '\n' && (len(b) == 1 || b[len(b)-2] == '\n') { - b = b[:len(b)-1] - } - return b -} - -// A printer collects the state during printing of a file or expression. -type printer struct { - bytes.Buffer // output buffer - comment []Comment // pending end-of-line comments - margin int // left margin (indent), a number of tabs -} - -// printf prints to the buffer. -func (p *printer) printf(format string, args ...interface{}) { - fmt.Fprintf(p, format, args...) -} - -// indent returns the position on the current line, in bytes, 0-indexed. -func (p *printer) indent() int { - b := p.Bytes() - n := 0 - for n < len(b) && b[len(b)-1-n] != '\n' { - n++ - } - return n -} - -// newline ends the current line, flushing end-of-line comments. -func (p *printer) newline() { - if len(p.comment) > 0 { - p.printf(" ") - for i, com := range p.comment { - if i > 0 { - p.trim() - p.printf("\n") - for i := 0; i < p.margin; i++ { - p.printf("\t") - } - } - p.printf("%s", strings.TrimSpace(com.Token)) - } - p.comment = p.comment[:0] - } - - p.trim() - if b := p.Bytes(); len(b) == 0 || (len(b) >= 2 && b[len(b)-1] == '\n' && b[len(b)-2] == '\n') { - // skip the blank line at top of file or after a blank line - } else { - p.printf("\n") - } - for i := 0; i < p.margin; i++ { - p.printf("\t") - } -} - -// trim removes trailing spaces and tabs from the current line. -func (p *printer) trim() { - // Remove trailing spaces and tabs from line we're about to end. - b := p.Bytes() - n := len(b) - for n > 0 && (b[n-1] == '\t' || b[n-1] == ' ') { - n-- - } - p.Truncate(n) -} - -// file formats the given file into the print buffer. -func (p *printer) file(f *FileSyntax) { - for _, com := range f.Before { - p.printf("%s", strings.TrimSpace(com.Token)) - p.newline() - } - - for i, stmt := range f.Stmt { - switch x := stmt.(type) { - case *CommentBlock: - // comments already handled - p.expr(x) - - default: - p.expr(x) - p.newline() - } - - for _, com := range stmt.Comment().After { - p.printf("%s", strings.TrimSpace(com.Token)) - p.newline() - } - - if i+1 < len(f.Stmt) { - p.newline() - } - } -} - -func (p *printer) expr(x Expr) { - // Emit line-comments preceding this expression. - if before := x.Comment().Before; len(before) > 0 { - // Want to print a line comment. - // Line comments must be at the current margin. - p.trim() - if p.indent() > 0 { - // There's other text on the line. Start a new line. - p.printf("\n") - } - // Re-indent to margin. - for i := 0; i < p.margin; i++ { - p.printf("\t") - } - for _, com := range before { - p.printf("%s", strings.TrimSpace(com.Token)) - p.newline() - } - } - - switch x := x.(type) { - default: - panic(fmt.Errorf("printer: unexpected type %T", x)) - - case *CommentBlock: - // done - - case *LParen: - p.printf("(") - case *RParen: - p.printf(")") - - case *Line: - p.tokens(x.Token) - - case *LineBlock: - p.tokens(x.Token) - p.printf(" ") - p.expr(&x.LParen) - p.margin++ - for _, l := range x.Line { - p.newline() - p.expr(l) - } - p.margin-- - p.newline() - p.expr(&x.RParen) - } - - // Queue end-of-line comments for printing when we - // reach the end of the line. - p.comment = append(p.comment, x.Comment().Suffix...) -} - -func (p *printer) tokens(tokens []string) { - sep := "" - for _, t := range tokens { - if t == "," || t == ")" || t == "]" || t == "}" { - sep = "" - } - p.printf("%s%s", sep, t) - sep = " " - if t == "(" || t == "[" || t == "{" { - sep = "" - } - } -} diff --git a/go/extractor/vendor/golang.org/x/mod/modfile/read.go b/go/extractor/vendor/golang.org/x/mod/modfile/read.go deleted file mode 100644 index 5b5bb5e115b3..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/modfile/read.go +++ /dev/null @@ -1,958 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package modfile - -import ( - "bytes" - "errors" - "fmt" - "os" - "strconv" - "strings" - "unicode" - "unicode/utf8" -) - -// A Position describes an arbitrary source position in a file, including the -// file, line, column, and byte offset. -type Position struct { - Line int // line in input (starting at 1) - LineRune int // rune in line (starting at 1) - Byte int // byte in input (starting at 0) -} - -// add returns the position at the end of s, assuming it starts at p. -func (p Position) add(s string) Position { - p.Byte += len(s) - if n := strings.Count(s, "\n"); n > 0 { - p.Line += n - s = s[strings.LastIndex(s, "\n")+1:] - p.LineRune = 1 - } - p.LineRune += utf8.RuneCountInString(s) - return p -} - -// An Expr represents an input element. -type Expr interface { - // Span returns the start and end position of the expression, - // excluding leading or trailing comments. - Span() (start, end Position) - - // Comment returns the comments attached to the expression. - // This method would normally be named 'Comments' but that - // would interfere with embedding a type of the same name. - Comment() *Comments -} - -// A Comment represents a single // comment. -type Comment struct { - Start Position - Token string // without trailing newline - Suffix bool // an end of line (not whole line) comment -} - -// Comments collects the comments associated with an expression. -type Comments struct { - Before []Comment // whole-line comments before this expression - Suffix []Comment // end-of-line comments after this expression - - // For top-level expressions only, After lists whole-line - // comments following the expression. - After []Comment -} - -// Comment returns the receiver. This isn't useful by itself, but -// a [Comments] struct is embedded into all the expression -// implementation types, and this gives each of those a Comment -// method to satisfy the Expr interface. -func (c *Comments) Comment() *Comments { - return c -} - -// A FileSyntax represents an entire go.mod file. -type FileSyntax struct { - Name string // file path - Comments - Stmt []Expr -} - -func (x *FileSyntax) Span() (start, end Position) { - if len(x.Stmt) == 0 { - return - } - start, _ = x.Stmt[0].Span() - _, end = x.Stmt[len(x.Stmt)-1].Span() - return start, end -} - -// addLine adds a line containing the given tokens to the file. -// -// If the first token of the hint matches the first token of the -// line, the new line is added at the end of the block containing hint, -// extracting hint into a new block if it is not yet in one. -// -// If the hint is non-nil buts its first token does not match, -// the new line is added after the block containing hint -// (or hint itself, if not in a block). -// -// If no hint is provided, addLine appends the line to the end of -// the last block with a matching first token, -// or to the end of the file if no such block exists. -func (x *FileSyntax) addLine(hint Expr, tokens ...string) *Line { - if hint == nil { - // If no hint given, add to the last statement of the given type. - Loop: - for i := len(x.Stmt) - 1; i >= 0; i-- { - stmt := x.Stmt[i] - switch stmt := stmt.(type) { - case *Line: - if stmt.Token != nil && stmt.Token[0] == tokens[0] { - hint = stmt - break Loop - } - case *LineBlock: - if stmt.Token[0] == tokens[0] { - hint = stmt - break Loop - } - } - } - } - - newLineAfter := func(i int) *Line { - new := &Line{Token: tokens} - if i == len(x.Stmt) { - x.Stmt = append(x.Stmt, new) - } else { - x.Stmt = append(x.Stmt, nil) - copy(x.Stmt[i+2:], x.Stmt[i+1:]) - x.Stmt[i+1] = new - } - return new - } - - if hint != nil { - for i, stmt := range x.Stmt { - switch stmt := stmt.(type) { - case *Line: - if stmt == hint { - if stmt.Token == nil || stmt.Token[0] != tokens[0] { - return newLineAfter(i) - } - - // Convert line to line block. - stmt.InBlock = true - block := &LineBlock{Token: stmt.Token[:1], Line: []*Line{stmt}} - stmt.Token = stmt.Token[1:] - x.Stmt[i] = block - new := &Line{Token: tokens[1:], InBlock: true} - block.Line = append(block.Line, new) - return new - } - - case *LineBlock: - if stmt == hint { - if stmt.Token[0] != tokens[0] { - return newLineAfter(i) - } - - new := &Line{Token: tokens[1:], InBlock: true} - stmt.Line = append(stmt.Line, new) - return new - } - - for j, line := range stmt.Line { - if line == hint { - if stmt.Token[0] != tokens[0] { - return newLineAfter(i) - } - - // Add new line after hint within the block. - stmt.Line = append(stmt.Line, nil) - copy(stmt.Line[j+2:], stmt.Line[j+1:]) - new := &Line{Token: tokens[1:], InBlock: true} - stmt.Line[j+1] = new - return new - } - } - } - } - } - - new := &Line{Token: tokens} - x.Stmt = append(x.Stmt, new) - return new -} - -func (x *FileSyntax) updateLine(line *Line, tokens ...string) { - if line.InBlock { - tokens = tokens[1:] - } - line.Token = tokens -} - -// markRemoved modifies line so that it (and its end-of-line comment, if any) -// will be dropped by (*FileSyntax).Cleanup. -func (line *Line) markRemoved() { - line.Token = nil - line.Comments.Suffix = nil -} - -// Cleanup cleans up the file syntax x after any edit operations. -// To avoid quadratic behavior, (*Line).markRemoved marks the line as dead -// by setting line.Token = nil but does not remove it from the slice -// in which it appears. After edits have all been indicated, -// calling Cleanup cleans out the dead lines. -func (x *FileSyntax) Cleanup() { - w := 0 - for _, stmt := range x.Stmt { - switch stmt := stmt.(type) { - case *Line: - if stmt.Token == nil { - continue - } - case *LineBlock: - ww := 0 - for _, line := range stmt.Line { - if line.Token != nil { - stmt.Line[ww] = line - ww++ - } - } - if ww == 0 { - continue - } - if ww == 1 { - // Collapse block into single line. - line := &Line{ - Comments: Comments{ - Before: commentsAdd(stmt.Before, stmt.Line[0].Before), - Suffix: commentsAdd(stmt.Line[0].Suffix, stmt.Suffix), - After: commentsAdd(stmt.Line[0].After, stmt.After), - }, - Token: stringsAdd(stmt.Token, stmt.Line[0].Token), - } - x.Stmt[w] = line - w++ - continue - } - stmt.Line = stmt.Line[:ww] - } - x.Stmt[w] = stmt - w++ - } - x.Stmt = x.Stmt[:w] -} - -func commentsAdd(x, y []Comment) []Comment { - return append(x[:len(x):len(x)], y...) -} - -func stringsAdd(x, y []string) []string { - return append(x[:len(x):len(x)], y...) -} - -// A CommentBlock represents a top-level block of comments separate -// from any rule. -type CommentBlock struct { - Comments - Start Position -} - -func (x *CommentBlock) Span() (start, end Position) { - return x.Start, x.Start -} - -// A Line is a single line of tokens. -type Line struct { - Comments - Start Position - Token []string - InBlock bool - End Position -} - -func (x *Line) Span() (start, end Position) { - return x.Start, x.End -} - -// A LineBlock is a factored block of lines, like -// -// require ( -// "x" -// "y" -// ) -type LineBlock struct { - Comments - Start Position - LParen LParen - Token []string - Line []*Line - RParen RParen -} - -func (x *LineBlock) Span() (start, end Position) { - return x.Start, x.RParen.Pos.add(")") -} - -// An LParen represents the beginning of a parenthesized line block. -// It is a place to store suffix comments. -type LParen struct { - Comments - Pos Position -} - -func (x *LParen) Span() (start, end Position) { - return x.Pos, x.Pos.add(")") -} - -// An RParen represents the end of a parenthesized line block. -// It is a place to store whole-line (before) comments. -type RParen struct { - Comments - Pos Position -} - -func (x *RParen) Span() (start, end Position) { - return x.Pos, x.Pos.add(")") -} - -// An input represents a single input file being parsed. -type input struct { - // Lexing state. - filename string // name of input file, for errors - complete []byte // entire input - remaining []byte // remaining input - tokenStart []byte // token being scanned to end of input - token token // next token to be returned by lex, peek - pos Position // current input position - comments []Comment // accumulated comments - - // Parser state. - file *FileSyntax // returned top-level syntax tree - parseErrors ErrorList // errors encountered during parsing - - // Comment assignment state. - pre []Expr // all expressions, in preorder traversal - post []Expr // all expressions, in postorder traversal -} - -func newInput(filename string, data []byte) *input { - return &input{ - filename: filename, - complete: data, - remaining: data, - pos: Position{Line: 1, LineRune: 1, Byte: 0}, - } -} - -// parse parses the input file. -func parse(file string, data []byte) (f *FileSyntax, err error) { - // The parser panics for both routine errors like syntax errors - // and for programmer bugs like array index errors. - // Turn both into error returns. Catching bug panics is - // especially important when processing many files. - in := newInput(file, data) - defer func() { - if e := recover(); e != nil && e != &in.parseErrors { - in.parseErrors = append(in.parseErrors, Error{ - Filename: in.filename, - Pos: in.pos, - Err: fmt.Errorf("internal error: %v", e), - }) - } - if err == nil && len(in.parseErrors) > 0 { - err = in.parseErrors - } - }() - - // Prime the lexer by reading in the first token. It will be available - // in the next peek() or lex() call. - in.readToken() - - // Invoke the parser. - in.parseFile() - if len(in.parseErrors) > 0 { - return nil, in.parseErrors - } - in.file.Name = in.filename - - // Assign comments to nearby syntax. - in.assignComments() - - return in.file, nil -} - -// Error is called to report an error. -// Error does not return: it panics. -func (in *input) Error(s string) { - in.parseErrors = append(in.parseErrors, Error{ - Filename: in.filename, - Pos: in.pos, - Err: errors.New(s), - }) - panic(&in.parseErrors) -} - -// eof reports whether the input has reached end of file. -func (in *input) eof() bool { - return len(in.remaining) == 0 -} - -// peekRune returns the next rune in the input without consuming it. -func (in *input) peekRune() int { - if len(in.remaining) == 0 { - return 0 - } - r, _ := utf8.DecodeRune(in.remaining) - return int(r) -} - -// peekPrefix reports whether the remaining input begins with the given prefix. -func (in *input) peekPrefix(prefix string) bool { - // This is like bytes.HasPrefix(in.remaining, []byte(prefix)) - // but without the allocation of the []byte copy of prefix. - for i := 0; i < len(prefix); i++ { - if i >= len(in.remaining) || in.remaining[i] != prefix[i] { - return false - } - } - return true -} - -// readRune consumes and returns the next rune in the input. -func (in *input) readRune() int { - if len(in.remaining) == 0 { - in.Error("internal lexer error: readRune at EOF") - } - r, size := utf8.DecodeRune(in.remaining) - in.remaining = in.remaining[size:] - if r == '\n' { - in.pos.Line++ - in.pos.LineRune = 1 - } else { - in.pos.LineRune++ - } - in.pos.Byte += size - return int(r) -} - -type token struct { - kind tokenKind - pos Position - endPos Position - text string -} - -type tokenKind int - -const ( - _EOF tokenKind = -(iota + 1) - _EOLCOMMENT - _IDENT - _STRING - _COMMENT - - // newlines and punctuation tokens are allowed as ASCII codes. -) - -func (k tokenKind) isComment() bool { - return k == _COMMENT || k == _EOLCOMMENT -} - -// isEOL returns whether a token terminates a line. -func (k tokenKind) isEOL() bool { - return k == _EOF || k == _EOLCOMMENT || k == '\n' -} - -// startToken marks the beginning of the next input token. -// It must be followed by a call to endToken, once the token's text has -// been consumed using readRune. -func (in *input) startToken() { - in.tokenStart = in.remaining - in.token.text = "" - in.token.pos = in.pos -} - -// endToken marks the end of an input token. -// It records the actual token string in tok.text. -// A single trailing newline (LF or CRLF) will be removed from comment tokens. -func (in *input) endToken(kind tokenKind) { - in.token.kind = kind - text := string(in.tokenStart[:len(in.tokenStart)-len(in.remaining)]) - if kind.isComment() { - if strings.HasSuffix(text, "\r\n") { - text = text[:len(text)-2] - } else { - text = strings.TrimSuffix(text, "\n") - } - } - in.token.text = text - in.token.endPos = in.pos -} - -// peek returns the kind of the next token returned by lex. -func (in *input) peek() tokenKind { - return in.token.kind -} - -// lex is called from the parser to obtain the next input token. -func (in *input) lex() token { - tok := in.token - in.readToken() - return tok -} - -// readToken lexes the next token from the text and stores it in in.token. -func (in *input) readToken() { - // Skip past spaces, stopping at non-space or EOF. - for !in.eof() { - c := in.peekRune() - if c == ' ' || c == '\t' || c == '\r' { - in.readRune() - continue - } - - // Comment runs to end of line. - if in.peekPrefix("//") { - in.startToken() - - // Is this comment the only thing on its line? - // Find the last \n before this // and see if it's all - // spaces from there to here. - i := bytes.LastIndex(in.complete[:in.pos.Byte], []byte("\n")) - suffix := len(bytes.TrimSpace(in.complete[i+1:in.pos.Byte])) > 0 - in.readRune() - in.readRune() - - // Consume comment. - for len(in.remaining) > 0 && in.readRune() != '\n' { - } - - // If we are at top level (not in a statement), hand the comment to - // the parser as a _COMMENT token. The grammar is written - // to handle top-level comments itself. - if !suffix { - in.endToken(_COMMENT) - return - } - - // Otherwise, save comment for later attachment to syntax tree. - in.endToken(_EOLCOMMENT) - in.comments = append(in.comments, Comment{in.token.pos, in.token.text, suffix}) - return - } - - if in.peekPrefix("/*") { - in.Error("mod files must use // comments (not /* */ comments)") - } - - // Found non-space non-comment. - break - } - - // Found the beginning of the next token. - in.startToken() - - // End of file. - if in.eof() { - in.endToken(_EOF) - return - } - - // Punctuation tokens. - switch c := in.peekRune(); c { - case '\n', '(', ')', '[', ']', '{', '}', ',': - in.readRune() - in.endToken(tokenKind(c)) - return - - case '"', '`': // quoted string - quote := c - in.readRune() - for { - if in.eof() { - in.pos = in.token.pos - in.Error("unexpected EOF in string") - } - if in.peekRune() == '\n' { - in.Error("unexpected newline in string") - } - c := in.readRune() - if c == quote { - break - } - if c == '\\' && quote != '`' { - if in.eof() { - in.pos = in.token.pos - in.Error("unexpected EOF in string") - } - in.readRune() - } - } - in.endToken(_STRING) - return - } - - // Checked all punctuation. Must be identifier token. - if c := in.peekRune(); !isIdent(c) { - in.Error(fmt.Sprintf("unexpected input character %#q", c)) - } - - // Scan over identifier. - for isIdent(in.peekRune()) { - if in.peekPrefix("//") { - break - } - if in.peekPrefix("/*") { - in.Error("mod files must use // comments (not /* */ comments)") - } - in.readRune() - } - in.endToken(_IDENT) -} - -// isIdent reports whether c is an identifier rune. -// We treat most printable runes as identifier runes, except for a handful of -// ASCII punctuation characters. -func isIdent(c int) bool { - switch r := rune(c); r { - case ' ', '(', ')', '[', ']', '{', '}', ',': - return false - default: - return !unicode.IsSpace(r) && unicode.IsPrint(r) - } -} - -// Comment assignment. -// We build two lists of all subexpressions, preorder and postorder. -// The preorder list is ordered by start location, with outer expressions first. -// The postorder list is ordered by end location, with outer expressions last. -// We use the preorder list to assign each whole-line comment to the syntax -// immediately following it, and we use the postorder list to assign each -// end-of-line comment to the syntax immediately preceding it. - -// order walks the expression adding it and its subexpressions to the -// preorder and postorder lists. -func (in *input) order(x Expr) { - if x != nil { - in.pre = append(in.pre, x) - } - switch x := x.(type) { - default: - panic(fmt.Errorf("order: unexpected type %T", x)) - case nil: - // nothing - case *LParen, *RParen: - // nothing - case *CommentBlock: - // nothing - case *Line: - // nothing - case *FileSyntax: - for _, stmt := range x.Stmt { - in.order(stmt) - } - case *LineBlock: - in.order(&x.LParen) - for _, l := range x.Line { - in.order(l) - } - in.order(&x.RParen) - } - if x != nil { - in.post = append(in.post, x) - } -} - -// assignComments attaches comments to nearby syntax. -func (in *input) assignComments() { - const debug = false - - // Generate preorder and postorder lists. - in.order(in.file) - - // Split into whole-line comments and suffix comments. - var line, suffix []Comment - for _, com := range in.comments { - if com.Suffix { - suffix = append(suffix, com) - } else { - line = append(line, com) - } - } - - if debug { - for _, c := range line { - fmt.Fprintf(os.Stderr, "LINE %q :%d:%d #%d\n", c.Token, c.Start.Line, c.Start.LineRune, c.Start.Byte) - } - } - - // Assign line comments to syntax immediately following. - for _, x := range in.pre { - start, _ := x.Span() - if debug { - fmt.Fprintf(os.Stderr, "pre %T :%d:%d #%d\n", x, start.Line, start.LineRune, start.Byte) - } - xcom := x.Comment() - for len(line) > 0 && start.Byte >= line[0].Start.Byte { - if debug { - fmt.Fprintf(os.Stderr, "ASSIGN LINE %q #%d\n", line[0].Token, line[0].Start.Byte) - } - xcom.Before = append(xcom.Before, line[0]) - line = line[1:] - } - } - - // Remaining line comments go at end of file. - in.file.After = append(in.file.After, line...) - - if debug { - for _, c := range suffix { - fmt.Fprintf(os.Stderr, "SUFFIX %q :%d:%d #%d\n", c.Token, c.Start.Line, c.Start.LineRune, c.Start.Byte) - } - } - - // Assign suffix comments to syntax immediately before. - for i := len(in.post) - 1; i >= 0; i-- { - x := in.post[i] - - start, end := x.Span() - if debug { - fmt.Fprintf(os.Stderr, "post %T :%d:%d #%d :%d:%d #%d\n", x, start.Line, start.LineRune, start.Byte, end.Line, end.LineRune, end.Byte) - } - - // Do not assign suffix comments to end of line block or whole file. - // Instead assign them to the last element inside. - switch x.(type) { - case *FileSyntax: - continue - } - - // Do not assign suffix comments to something that starts - // on an earlier line, so that in - // - // x ( y - // z ) // comment - // - // we assign the comment to z and not to x ( ... ). - if start.Line != end.Line { - continue - } - xcom := x.Comment() - for len(suffix) > 0 && end.Byte <= suffix[len(suffix)-1].Start.Byte { - if debug { - fmt.Fprintf(os.Stderr, "ASSIGN SUFFIX %q #%d\n", suffix[len(suffix)-1].Token, suffix[len(suffix)-1].Start.Byte) - } - xcom.Suffix = append(xcom.Suffix, suffix[len(suffix)-1]) - suffix = suffix[:len(suffix)-1] - } - } - - // We assigned suffix comments in reverse. - // If multiple suffix comments were appended to the same - // expression node, they are now in reverse. Fix that. - for _, x := range in.post { - reverseComments(x.Comment().Suffix) - } - - // Remaining suffix comments go at beginning of file. - in.file.Before = append(in.file.Before, suffix...) -} - -// reverseComments reverses the []Comment list. -func reverseComments(list []Comment) { - for i, j := 0, len(list)-1; i < j; i, j = i+1, j-1 { - list[i], list[j] = list[j], list[i] - } -} - -func (in *input) parseFile() { - in.file = new(FileSyntax) - var cb *CommentBlock - for { - switch in.peek() { - case '\n': - in.lex() - if cb != nil { - in.file.Stmt = append(in.file.Stmt, cb) - cb = nil - } - case _COMMENT: - tok := in.lex() - if cb == nil { - cb = &CommentBlock{Start: tok.pos} - } - com := cb.Comment() - com.Before = append(com.Before, Comment{Start: tok.pos, Token: tok.text}) - case _EOF: - if cb != nil { - in.file.Stmt = append(in.file.Stmt, cb) - } - return - default: - in.parseStmt() - if cb != nil { - in.file.Stmt[len(in.file.Stmt)-1].Comment().Before = cb.Before - cb = nil - } - } - } -} - -func (in *input) parseStmt() { - tok := in.lex() - start := tok.pos - end := tok.endPos - tokens := []string{tok.text} - for { - tok := in.lex() - switch { - case tok.kind.isEOL(): - in.file.Stmt = append(in.file.Stmt, &Line{ - Start: start, - Token: tokens, - End: end, - }) - return - - case tok.kind == '(': - if next := in.peek(); next.isEOL() { - // Start of block: no more tokens on this line. - in.file.Stmt = append(in.file.Stmt, in.parseLineBlock(start, tokens, tok)) - return - } else if next == ')' { - rparen := in.lex() - if in.peek().isEOL() { - // Empty block. - in.lex() - in.file.Stmt = append(in.file.Stmt, &LineBlock{ - Start: start, - Token: tokens, - LParen: LParen{Pos: tok.pos}, - RParen: RParen{Pos: rparen.pos}, - }) - return - } - // '( )' in the middle of the line, not a block. - tokens = append(tokens, tok.text, rparen.text) - } else { - // '(' in the middle of the line, not a block. - tokens = append(tokens, tok.text) - } - - default: - tokens = append(tokens, tok.text) - end = tok.endPos - } - } -} - -func (in *input) parseLineBlock(start Position, token []string, lparen token) *LineBlock { - x := &LineBlock{ - Start: start, - Token: token, - LParen: LParen{Pos: lparen.pos}, - } - var comments []Comment - for { - switch in.peek() { - case _EOLCOMMENT: - // Suffix comment, will be attached later by assignComments. - in.lex() - case '\n': - // Blank line. Add an empty comment to preserve it. - in.lex() - if len(comments) == 0 && len(x.Line) > 0 || len(comments) > 0 && comments[len(comments)-1].Token != "" { - comments = append(comments, Comment{}) - } - case _COMMENT: - tok := in.lex() - comments = append(comments, Comment{Start: tok.pos, Token: tok.text}) - case _EOF: - in.Error(fmt.Sprintf("syntax error (unterminated block started at %s:%d:%d)", in.filename, x.Start.Line, x.Start.LineRune)) - case ')': - rparen := in.lex() - x.RParen.Before = comments - x.RParen.Pos = rparen.pos - if !in.peek().isEOL() { - in.Error("syntax error (expected newline after closing paren)") - } - in.lex() - return x - default: - l := in.parseLine() - x.Line = append(x.Line, l) - l.Comment().Before = comments - comments = nil - } - } -} - -func (in *input) parseLine() *Line { - tok := in.lex() - if tok.kind.isEOL() { - in.Error("internal parse error: parseLine at end of line") - } - start := tok.pos - end := tok.endPos - tokens := []string{tok.text} - for { - tok := in.lex() - if tok.kind.isEOL() { - return &Line{ - Start: start, - Token: tokens, - End: end, - InBlock: true, - } - } - tokens = append(tokens, tok.text) - end = tok.endPos - } -} - -var ( - slashSlash = []byte("//") - moduleStr = []byte("module") -) - -// ModulePath returns the module path from the gomod file text. -// If it cannot find a module path, it returns an empty string. -// It is tolerant of unrelated problems in the go.mod file. -func ModulePath(mod []byte) string { - for len(mod) > 0 { - line := mod - mod = nil - if i := bytes.IndexByte(line, '\n'); i >= 0 { - line, mod = line[:i], line[i+1:] - } - if i := bytes.Index(line, slashSlash); i >= 0 { - line = line[:i] - } - line = bytes.TrimSpace(line) - if !bytes.HasPrefix(line, moduleStr) { - continue - } - line = line[len(moduleStr):] - n := len(line) - line = bytes.TrimSpace(line) - if len(line) == n || len(line) == 0 { - continue - } - - if line[0] == '"' || line[0] == '`' { - p, err := strconv.Unquote(string(line)) - if err != nil { - return "" // malformed quoted string or multiline module path - } - return p - } - - return string(line) - } - return "" // missing module path -} diff --git a/go/extractor/vendor/golang.org/x/mod/modfile/rule.go b/go/extractor/vendor/golang.org/x/mod/modfile/rule.go deleted file mode 100644 index 35fd1f534cf8..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/modfile/rule.go +++ /dev/null @@ -1,1663 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package modfile implements a parser and formatter for go.mod files. -// -// The go.mod syntax is described in -// https://pkg.go.dev/cmd/go/#hdr-The_go_mod_file. -// -// The [Parse] and [ParseLax] functions both parse a go.mod file and return an -// abstract syntax tree. ParseLax ignores unknown statements and may be used to -// parse go.mod files that may have been developed with newer versions of Go. -// -// The [File] struct returned by Parse and ParseLax represent an abstract -// go.mod file. File has several methods like [File.AddNewRequire] and -// [File.DropReplace] that can be used to programmatically edit a file. -// -// The [Format] function formats a File back to a byte slice which can be -// written to a file. -package modfile - -import ( - "errors" - "fmt" - "path/filepath" - "sort" - "strconv" - "strings" - "unicode" - - "golang.org/x/mod/internal/lazyregexp" - "golang.org/x/mod/module" - "golang.org/x/mod/semver" -) - -// A File is the parsed, interpreted form of a go.mod file. -type File struct { - Module *Module - Go *Go - Toolchain *Toolchain - Require []*Require - Exclude []*Exclude - Replace []*Replace - Retract []*Retract - - Syntax *FileSyntax -} - -// A Module is the module statement. -type Module struct { - Mod module.Version - Deprecated string - Syntax *Line -} - -// A Go is the go statement. -type Go struct { - Version string // "1.23" - Syntax *Line -} - -// A Toolchain is the toolchain statement. -type Toolchain struct { - Name string // "go1.21rc1" - Syntax *Line -} - -// An Exclude is a single exclude statement. -type Exclude struct { - Mod module.Version - Syntax *Line -} - -// A Replace is a single replace statement. -type Replace struct { - Old module.Version - New module.Version - Syntax *Line -} - -// A Retract is a single retract statement. -type Retract struct { - VersionInterval - Rationale string - Syntax *Line -} - -// A VersionInterval represents a range of versions with upper and lower bounds. -// Intervals are closed: both bounds are included. When Low is equal to High, -// the interval may refer to a single version ('v1.2.3') or an interval -// ('[v1.2.3, v1.2.3]'); both have the same representation. -type VersionInterval struct { - Low, High string -} - -// A Require is a single require statement. -type Require struct { - Mod module.Version - Indirect bool // has "// indirect" comment - Syntax *Line -} - -func (r *Require) markRemoved() { - r.Syntax.markRemoved() - *r = Require{} -} - -func (r *Require) setVersion(v string) { - r.Mod.Version = v - - if line := r.Syntax; len(line.Token) > 0 { - if line.InBlock { - // If the line is preceded by an empty line, remove it; see - // https://golang.org/issue/33779. - if len(line.Comments.Before) == 1 && len(line.Comments.Before[0].Token) == 0 { - line.Comments.Before = line.Comments.Before[:0] - } - if len(line.Token) >= 2 { // example.com v1.2.3 - line.Token[1] = v - } - } else { - if len(line.Token) >= 3 { // require example.com v1.2.3 - line.Token[2] = v - } - } - } -} - -// setIndirect sets line to have (or not have) a "// indirect" comment. -func (r *Require) setIndirect(indirect bool) { - r.Indirect = indirect - line := r.Syntax - if isIndirect(line) == indirect { - return - } - if indirect { - // Adding comment. - if len(line.Suffix) == 0 { - // New comment. - line.Suffix = []Comment{{Token: "// indirect", Suffix: true}} - return - } - - com := &line.Suffix[0] - text := strings.TrimSpace(strings.TrimPrefix(com.Token, string(slashSlash))) - if text == "" { - // Empty comment. - com.Token = "// indirect" - return - } - - // Insert at beginning of existing comment. - com.Token = "// indirect; " + text - return - } - - // Removing comment. - f := strings.TrimSpace(strings.TrimPrefix(line.Suffix[0].Token, string(slashSlash))) - if f == "indirect" { - // Remove whole comment. - line.Suffix = nil - return - } - - // Remove comment prefix. - com := &line.Suffix[0] - i := strings.Index(com.Token, "indirect;") - com.Token = "//" + com.Token[i+len("indirect;"):] -} - -// isIndirect reports whether line has a "// indirect" comment, -// meaning it is in go.mod only for its effect on indirect dependencies, -// so that it can be dropped entirely once the effective version of the -// indirect dependency reaches the given minimum version. -func isIndirect(line *Line) bool { - if len(line.Suffix) == 0 { - return false - } - f := strings.Fields(strings.TrimPrefix(line.Suffix[0].Token, string(slashSlash))) - return (len(f) == 1 && f[0] == "indirect" || len(f) > 1 && f[0] == "indirect;") -} - -func (f *File) AddModuleStmt(path string) error { - if f.Syntax == nil { - f.Syntax = new(FileSyntax) - } - if f.Module == nil { - f.Module = &Module{ - Mod: module.Version{Path: path}, - Syntax: f.Syntax.addLine(nil, "module", AutoQuote(path)), - } - } else { - f.Module.Mod.Path = path - f.Syntax.updateLine(f.Module.Syntax, "module", AutoQuote(path)) - } - return nil -} - -func (f *File) AddComment(text string) { - if f.Syntax == nil { - f.Syntax = new(FileSyntax) - } - f.Syntax.Stmt = append(f.Syntax.Stmt, &CommentBlock{ - Comments: Comments{ - Before: []Comment{ - { - Token: text, - }, - }, - }, - }) -} - -type VersionFixer func(path, version string) (string, error) - -// errDontFix is returned by a VersionFixer to indicate the version should be -// left alone, even if it's not canonical. -var dontFixRetract VersionFixer = func(_, vers string) (string, error) { - return vers, nil -} - -// Parse parses and returns a go.mod file. -// -// file is the name of the file, used in positions and errors. -// -// data is the content of the file. -// -// fix is an optional function that canonicalizes module versions. -// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] -// must return the same string). -func Parse(file string, data []byte, fix VersionFixer) (*File, error) { - return parseToFile(file, data, fix, true) -} - -// ParseLax is like Parse but ignores unknown statements. -// It is used when parsing go.mod files other than the main module, -// under the theory that most statement types we add in the future will -// only apply in the main module, like exclude and replace, -// and so we get better gradual deployments if old go commands -// simply ignore those statements when found in go.mod files -// in dependencies. -func ParseLax(file string, data []byte, fix VersionFixer) (*File, error) { - return parseToFile(file, data, fix, false) -} - -func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (parsed *File, err error) { - fs, err := parse(file, data) - if err != nil { - return nil, err - } - f := &File{ - Syntax: fs, - } - var errs ErrorList - - // fix versions in retract directives after the file is parsed. - // We need the module path to fix versions, and it might be at the end. - defer func() { - oldLen := len(errs) - f.fixRetract(fix, &errs) - if len(errs) > oldLen { - parsed, err = nil, errs - } - }() - - for _, x := range fs.Stmt { - switch x := x.(type) { - case *Line: - f.add(&errs, nil, x, x.Token[0], x.Token[1:], fix, strict) - - case *LineBlock: - if len(x.Token) > 1 { - if strict { - errs = append(errs, Error{ - Filename: file, - Pos: x.Start, - Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), - }) - } - continue - } - switch x.Token[0] { - default: - if strict { - errs = append(errs, Error{ - Filename: file, - Pos: x.Start, - Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), - }) - } - continue - case "module", "require", "exclude", "replace", "retract": - for _, l := range x.Line { - f.add(&errs, x, l, x.Token[0], l.Token, fix, strict) - } - } - } - } - - if len(errs) > 0 { - return nil, errs - } - return f, nil -} - -var GoVersionRE = lazyregexp.New(`^([1-9][0-9]*)\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))?([a-z]+[0-9]+)?$`) -var laxGoVersionRE = lazyregexp.New(`^v?(([1-9][0-9]*)\.(0|[1-9][0-9]*))([^0-9].*)$`) - -// Toolchains must be named beginning with `go1`, -// like "go1.20.3" or "go1.20.3-gccgo". As a special case, "default" is also permitted. -var ToolchainRE = lazyregexp.New(`^default$|^go1($|\.)`) - -func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, args []string, fix VersionFixer, strict bool) { - // If strict is false, this module is a dependency. - // We ignore all unknown directives as well as main-module-only - // directives like replace and exclude. It will work better for - // forward compatibility if we can depend on modules that have unknown - // statements (presumed relevant only when acting as the main module) - // and simply ignore those statements. - if !strict { - switch verb { - case "go", "module", "retract", "require": - // want these even for dependency go.mods - default: - return - } - } - - wrapModPathError := func(modPath string, err error) { - *errs = append(*errs, Error{ - Filename: f.Syntax.Name, - Pos: line.Start, - ModPath: modPath, - Verb: verb, - Err: err, - }) - } - wrapError := func(err error) { - *errs = append(*errs, Error{ - Filename: f.Syntax.Name, - Pos: line.Start, - Err: err, - }) - } - errorf := func(format string, args ...interface{}) { - wrapError(fmt.Errorf(format, args...)) - } - - switch verb { - default: - errorf("unknown directive: %s", verb) - - case "go": - if f.Go != nil { - errorf("repeated go statement") - return - } - if len(args) != 1 { - errorf("go directive expects exactly one argument") - return - } else if !GoVersionRE.MatchString(args[0]) { - fixed := false - if !strict { - if m := laxGoVersionRE.FindStringSubmatch(args[0]); m != nil { - args[0] = m[1] - fixed = true - } - } - if !fixed { - errorf("invalid go version '%s': must match format 1.23.0", args[0]) - return - } - } - - f.Go = &Go{Syntax: line} - f.Go.Version = args[0] - - case "toolchain": - if f.Toolchain != nil { - errorf("repeated toolchain statement") - return - } - if len(args) != 1 { - errorf("toolchain directive expects exactly one argument") - return - } else if strict && !ToolchainRE.MatchString(args[0]) { - errorf("invalid toolchain version '%s': must match format go1.23.0 or local", args[0]) - return - } - f.Toolchain = &Toolchain{Syntax: line} - f.Toolchain.Name = args[0] - - case "module": - if f.Module != nil { - errorf("repeated module statement") - return - } - deprecated := parseDeprecation(block, line) - f.Module = &Module{ - Syntax: line, - Deprecated: deprecated, - } - if len(args) != 1 { - errorf("usage: module module/path") - return - } - s, err := parseString(&args[0]) - if err != nil { - errorf("invalid quoted string: %v", err) - return - } - f.Module.Mod = module.Version{Path: s} - - case "require", "exclude": - if len(args) != 2 { - errorf("usage: %s module/path v1.2.3", verb) - return - } - s, err := parseString(&args[0]) - if err != nil { - errorf("invalid quoted string: %v", err) - return - } - v, err := parseVersion(verb, s, &args[1], fix) - if err != nil { - wrapError(err) - return - } - pathMajor, err := modulePathMajor(s) - if err != nil { - wrapError(err) - return - } - if err := module.CheckPathMajor(v, pathMajor); err != nil { - wrapModPathError(s, err) - return - } - if verb == "require" { - f.Require = append(f.Require, &Require{ - Mod: module.Version{Path: s, Version: v}, - Syntax: line, - Indirect: isIndirect(line), - }) - } else { - f.Exclude = append(f.Exclude, &Exclude{ - Mod: module.Version{Path: s, Version: v}, - Syntax: line, - }) - } - - case "replace": - replace, wrappederr := parseReplace(f.Syntax.Name, line, verb, args, fix) - if wrappederr != nil { - *errs = append(*errs, *wrappederr) - return - } - f.Replace = append(f.Replace, replace) - - case "retract": - rationale := parseDirectiveComment(block, line) - vi, err := parseVersionInterval(verb, "", &args, dontFixRetract) - if err != nil { - if strict { - wrapError(err) - return - } else { - // Only report errors parsing intervals in the main module. We may - // support additional syntax in the future, such as open and half-open - // intervals. Those can't be supported now, because they break the - // go.mod parser, even in lax mode. - return - } - } - if len(args) > 0 && strict { - // In the future, there may be additional information after the version. - errorf("unexpected token after version: %q", args[0]) - return - } - retract := &Retract{ - VersionInterval: vi, - Rationale: rationale, - Syntax: line, - } - f.Retract = append(f.Retract, retract) - } -} - -func parseReplace(filename string, line *Line, verb string, args []string, fix VersionFixer) (*Replace, *Error) { - wrapModPathError := func(modPath string, err error) *Error { - return &Error{ - Filename: filename, - Pos: line.Start, - ModPath: modPath, - Verb: verb, - Err: err, - } - } - wrapError := func(err error) *Error { - return &Error{ - Filename: filename, - Pos: line.Start, - Err: err, - } - } - errorf := func(format string, args ...interface{}) *Error { - return wrapError(fmt.Errorf(format, args...)) - } - - arrow := 2 - if len(args) >= 2 && args[1] == "=>" { - arrow = 1 - } - if len(args) < arrow+2 || len(args) > arrow+3 || args[arrow] != "=>" { - return nil, errorf("usage: %s module/path [v1.2.3] => other/module v1.4\n\t or %s module/path [v1.2.3] => ../local/directory", verb, verb) - } - s, err := parseString(&args[0]) - if err != nil { - return nil, errorf("invalid quoted string: %v", err) - } - pathMajor, err := modulePathMajor(s) - if err != nil { - return nil, wrapModPathError(s, err) - - } - var v string - if arrow == 2 { - v, err = parseVersion(verb, s, &args[1], fix) - if err != nil { - return nil, wrapError(err) - } - if err := module.CheckPathMajor(v, pathMajor); err != nil { - return nil, wrapModPathError(s, err) - } - } - ns, err := parseString(&args[arrow+1]) - if err != nil { - return nil, errorf("invalid quoted string: %v", err) - } - nv := "" - if len(args) == arrow+2 { - if !IsDirectoryPath(ns) { - if strings.Contains(ns, "@") { - return nil, errorf("replacement module must match format 'path version', not 'path@version'") - } - return nil, errorf("replacement module without version must be directory path (rooted or starting with . or ..)") - } - if filepath.Separator == '/' && strings.Contains(ns, `\`) { - return nil, errorf("replacement directory appears to be Windows path (on a non-windows system)") - } - } - if len(args) == arrow+3 { - nv, err = parseVersion(verb, ns, &args[arrow+2], fix) - if err != nil { - return nil, wrapError(err) - } - if IsDirectoryPath(ns) { - return nil, errorf("replacement module directory path %q cannot have version", ns) - } - } - return &Replace{ - Old: module.Version{Path: s, Version: v}, - New: module.Version{Path: ns, Version: nv}, - Syntax: line, - }, nil -} - -// fixRetract applies fix to each retract directive in f, appending any errors -// to errs. -// -// Most versions are fixed as we parse the file, but for retract directives, -// the relevant module path is the one specified with the module directive, -// and that might appear at the end of the file (or not at all). -func (f *File) fixRetract(fix VersionFixer, errs *ErrorList) { - if fix == nil { - return - } - path := "" - if f.Module != nil { - path = f.Module.Mod.Path - } - var r *Retract - wrapError := func(err error) { - *errs = append(*errs, Error{ - Filename: f.Syntax.Name, - Pos: r.Syntax.Start, - Err: err, - }) - } - - for _, r = range f.Retract { - if path == "" { - wrapError(errors.New("no module directive found, so retract cannot be used")) - return // only print the first one of these - } - - args := r.Syntax.Token - if args[0] == "retract" { - args = args[1:] - } - vi, err := parseVersionInterval("retract", path, &args, fix) - if err != nil { - wrapError(err) - } - r.VersionInterval = vi - } -} - -func (f *WorkFile) add(errs *ErrorList, line *Line, verb string, args []string, fix VersionFixer) { - wrapError := func(err error) { - *errs = append(*errs, Error{ - Filename: f.Syntax.Name, - Pos: line.Start, - Err: err, - }) - } - errorf := func(format string, args ...interface{}) { - wrapError(fmt.Errorf(format, args...)) - } - - switch verb { - default: - errorf("unknown directive: %s", verb) - - case "go": - if f.Go != nil { - errorf("repeated go statement") - return - } - if len(args) != 1 { - errorf("go directive expects exactly one argument") - return - } else if !GoVersionRE.MatchString(args[0]) { - errorf("invalid go version '%s': must match format 1.23", args[0]) - return - } - - f.Go = &Go{Syntax: line} - f.Go.Version = args[0] - - case "toolchain": - if f.Toolchain != nil { - errorf("repeated toolchain statement") - return - } - if len(args) != 1 { - errorf("toolchain directive expects exactly one argument") - return - } else if !ToolchainRE.MatchString(args[0]) { - errorf("invalid toolchain version '%s': must match format go1.23 or local", args[0]) - return - } - - f.Toolchain = &Toolchain{Syntax: line} - f.Toolchain.Name = args[0] - - case "use": - if len(args) != 1 { - errorf("usage: %s local/dir", verb) - return - } - s, err := parseString(&args[0]) - if err != nil { - errorf("invalid quoted string: %v", err) - return - } - f.Use = append(f.Use, &Use{ - Path: s, - Syntax: line, - }) - - case "replace": - replace, wrappederr := parseReplace(f.Syntax.Name, line, verb, args, fix) - if wrappederr != nil { - *errs = append(*errs, *wrappederr) - return - } - f.Replace = append(f.Replace, replace) - } -} - -// IsDirectoryPath reports whether the given path should be interpreted as a directory path. -// Just like on the go command line, relative paths starting with a '.' or '..' path component -// and rooted paths are directory paths; the rest are module paths. -func IsDirectoryPath(ns string) bool { - // Because go.mod files can move from one system to another, - // we check all known path syntaxes, both Unix and Windows. - return ns == "." || strings.HasPrefix(ns, "./") || strings.HasPrefix(ns, `.\`) || - ns == ".." || strings.HasPrefix(ns, "../") || strings.HasPrefix(ns, `..\`) || - strings.HasPrefix(ns, "/") || strings.HasPrefix(ns, `\`) || - len(ns) >= 2 && ('A' <= ns[0] && ns[0] <= 'Z' || 'a' <= ns[0] && ns[0] <= 'z') && ns[1] == ':' -} - -// MustQuote reports whether s must be quoted in order to appear as -// a single token in a go.mod line. -func MustQuote(s string) bool { - for _, r := range s { - switch r { - case ' ', '"', '\'', '`': - return true - - case '(', ')', '[', ']', '{', '}', ',': - if len(s) > 1 { - return true - } - - default: - if !unicode.IsPrint(r) { - return true - } - } - } - return s == "" || strings.Contains(s, "//") || strings.Contains(s, "/*") -} - -// AutoQuote returns s or, if quoting is required for s to appear in a go.mod, -// the quotation of s. -func AutoQuote(s string) string { - if MustQuote(s) { - return strconv.Quote(s) - } - return s -} - -func parseVersionInterval(verb string, path string, args *[]string, fix VersionFixer) (VersionInterval, error) { - toks := *args - if len(toks) == 0 || toks[0] == "(" { - return VersionInterval{}, fmt.Errorf("expected '[' or version") - } - if toks[0] != "[" { - v, err := parseVersion(verb, path, &toks[0], fix) - if err != nil { - return VersionInterval{}, err - } - *args = toks[1:] - return VersionInterval{Low: v, High: v}, nil - } - toks = toks[1:] - - if len(toks) == 0 { - return VersionInterval{}, fmt.Errorf("expected version after '['") - } - low, err := parseVersion(verb, path, &toks[0], fix) - if err != nil { - return VersionInterval{}, err - } - toks = toks[1:] - - if len(toks) == 0 || toks[0] != "," { - return VersionInterval{}, fmt.Errorf("expected ',' after version") - } - toks = toks[1:] - - if len(toks) == 0 { - return VersionInterval{}, fmt.Errorf("expected version after ','") - } - high, err := parseVersion(verb, path, &toks[0], fix) - if err != nil { - return VersionInterval{}, err - } - toks = toks[1:] - - if len(toks) == 0 || toks[0] != "]" { - return VersionInterval{}, fmt.Errorf("expected ']' after version") - } - toks = toks[1:] - - *args = toks - return VersionInterval{Low: low, High: high}, nil -} - -func parseString(s *string) (string, error) { - t := *s - if strings.HasPrefix(t, `"`) { - var err error - if t, err = strconv.Unquote(t); err != nil { - return "", err - } - } else if strings.ContainsAny(t, "\"'`") { - // Other quotes are reserved both for possible future expansion - // and to avoid confusion. For example if someone types 'x' - // we want that to be a syntax error and not a literal x in literal quotation marks. - return "", fmt.Errorf("unquoted string cannot contain quote") - } - *s = AutoQuote(t) - return t, nil -} - -var deprecatedRE = lazyregexp.New(`(?s)(?:^|\n\n)Deprecated: *(.*?)(?:$|\n\n)`) - -// parseDeprecation extracts the text of comments on a "module" directive and -// extracts a deprecation message from that. -// -// A deprecation message is contained in a paragraph within a block of comments -// that starts with "Deprecated:" (case sensitive). The message runs until the -// end of the paragraph and does not include the "Deprecated:" prefix. If the -// comment block has multiple paragraphs that start with "Deprecated:", -// parseDeprecation returns the message from the first. -func parseDeprecation(block *LineBlock, line *Line) string { - text := parseDirectiveComment(block, line) - m := deprecatedRE.FindStringSubmatch(text) - if m == nil { - return "" - } - return m[1] -} - -// parseDirectiveComment extracts the text of comments on a directive. -// If the directive's line does not have comments and is part of a block that -// does have comments, the block's comments are used. -func parseDirectiveComment(block *LineBlock, line *Line) string { - comments := line.Comment() - if block != nil && len(comments.Before) == 0 && len(comments.Suffix) == 0 { - comments = block.Comment() - } - groups := [][]Comment{comments.Before, comments.Suffix} - var lines []string - for _, g := range groups { - for _, c := range g { - if !strings.HasPrefix(c.Token, "//") { - continue // blank line - } - lines = append(lines, strings.TrimSpace(strings.TrimPrefix(c.Token, "//"))) - } - } - return strings.Join(lines, "\n") -} - -type ErrorList []Error - -func (e ErrorList) Error() string { - errStrs := make([]string, len(e)) - for i, err := range e { - errStrs[i] = err.Error() - } - return strings.Join(errStrs, "\n") -} - -type Error struct { - Filename string - Pos Position - Verb string - ModPath string - Err error -} - -func (e *Error) Error() string { - var pos string - if e.Pos.LineRune > 1 { - // Don't print LineRune if it's 1 (beginning of line). - // It's always 1 except in scanner errors, which are rare. - pos = fmt.Sprintf("%s:%d:%d: ", e.Filename, e.Pos.Line, e.Pos.LineRune) - } else if e.Pos.Line > 0 { - pos = fmt.Sprintf("%s:%d: ", e.Filename, e.Pos.Line) - } else if e.Filename != "" { - pos = fmt.Sprintf("%s: ", e.Filename) - } - - var directive string - if e.ModPath != "" { - directive = fmt.Sprintf("%s %s: ", e.Verb, e.ModPath) - } else if e.Verb != "" { - directive = fmt.Sprintf("%s: ", e.Verb) - } - - return pos + directive + e.Err.Error() -} - -func (e *Error) Unwrap() error { return e.Err } - -func parseVersion(verb string, path string, s *string, fix VersionFixer) (string, error) { - t, err := parseString(s) - if err != nil { - return "", &Error{ - Verb: verb, - ModPath: path, - Err: &module.InvalidVersionError{ - Version: *s, - Err: err, - }, - } - } - if fix != nil { - fixed, err := fix(path, t) - if err != nil { - if err, ok := err.(*module.ModuleError); ok { - return "", &Error{ - Verb: verb, - ModPath: path, - Err: err.Err, - } - } - return "", err - } - t = fixed - } else { - cv := module.CanonicalVersion(t) - if cv == "" { - return "", &Error{ - Verb: verb, - ModPath: path, - Err: &module.InvalidVersionError{ - Version: t, - Err: errors.New("must be of the form v1.2.3"), - }, - } - } - t = cv - } - *s = t - return *s, nil -} - -func modulePathMajor(path string) (string, error) { - _, major, ok := module.SplitPathVersion(path) - if !ok { - return "", fmt.Errorf("invalid module path") - } - return major, nil -} - -func (f *File) Format() ([]byte, error) { - return Format(f.Syntax), nil -} - -// Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like [File.DropRequire] -// clear the entry but do not remove it from the slice. -// Cleanup cleans out all the cleared entries. -func (f *File) Cleanup() { - w := 0 - for _, r := range f.Require { - if r.Mod.Path != "" { - f.Require[w] = r - w++ - } - } - f.Require = f.Require[:w] - - w = 0 - for _, x := range f.Exclude { - if x.Mod.Path != "" { - f.Exclude[w] = x - w++ - } - } - f.Exclude = f.Exclude[:w] - - w = 0 - for _, r := range f.Replace { - if r.Old.Path != "" { - f.Replace[w] = r - w++ - } - } - f.Replace = f.Replace[:w] - - w = 0 - for _, r := range f.Retract { - if r.Low != "" || r.High != "" { - f.Retract[w] = r - w++ - } - } - f.Retract = f.Retract[:w] - - f.Syntax.Cleanup() -} - -func (f *File) AddGoStmt(version string) error { - if !GoVersionRE.MatchString(version) { - return fmt.Errorf("invalid language version %q", version) - } - if f.Go == nil { - var hint Expr - if f.Module != nil && f.Module.Syntax != nil { - hint = f.Module.Syntax - } - f.Go = &Go{ - Version: version, - Syntax: f.Syntax.addLine(hint, "go", version), - } - } else { - f.Go.Version = version - f.Syntax.updateLine(f.Go.Syntax, "go", version) - } - return nil -} - -// DropGoStmt deletes the go statement from the file. -func (f *File) DropGoStmt() { - if f.Go != nil { - f.Go.Syntax.markRemoved() - f.Go = nil - } -} - -// DropToolchainStmt deletes the toolchain statement from the file. -func (f *File) DropToolchainStmt() { - if f.Toolchain != nil { - f.Toolchain.Syntax.markRemoved() - f.Toolchain = nil - } -} - -func (f *File) AddToolchainStmt(name string) error { - if !ToolchainRE.MatchString(name) { - return fmt.Errorf("invalid toolchain name %q", name) - } - if f.Toolchain == nil { - var hint Expr - if f.Go != nil && f.Go.Syntax != nil { - hint = f.Go.Syntax - } else if f.Module != nil && f.Module.Syntax != nil { - hint = f.Module.Syntax - } - f.Toolchain = &Toolchain{ - Name: name, - Syntax: f.Syntax.addLine(hint, "toolchain", name), - } - } else { - f.Toolchain.Name = name - f.Syntax.updateLine(f.Toolchain.Syntax, "toolchain", name) - } - return nil -} - -// AddRequire sets the first require line for path to version vers, -// preserving any existing comments for that line and removing all -// other lines for path. -// -// If no line currently exists for path, AddRequire adds a new line -// at the end of the last require block. -func (f *File) AddRequire(path, vers string) error { - need := true - for _, r := range f.Require { - if r.Mod.Path == path { - if need { - r.Mod.Version = vers - f.Syntax.updateLine(r.Syntax, "require", AutoQuote(path), vers) - need = false - } else { - r.Syntax.markRemoved() - *r = Require{} - } - } - } - - if need { - f.AddNewRequire(path, vers, false) - } - return nil -} - -// AddNewRequire adds a new require line for path at version vers at the end of -// the last require block, regardless of any existing require lines for path. -func (f *File) AddNewRequire(path, vers string, indirect bool) { - line := f.Syntax.addLine(nil, "require", AutoQuote(path), vers) - r := &Require{ - Mod: module.Version{Path: path, Version: vers}, - Syntax: line, - } - r.setIndirect(indirect) - f.Require = append(f.Require, r) -} - -// SetRequire updates the requirements of f to contain exactly req, preserving -// the existing block structure and line comment contents (except for 'indirect' -// markings) for the first requirement on each named module path. -// -// The Syntax field is ignored for the requirements in req. -// -// Any requirements not already present in the file are added to the block -// containing the last require line. -// -// The requirements in req must specify at most one distinct version for each -// module path. -// -// If any existing requirements may be removed, the caller should call -// [File.Cleanup] after all edits are complete. -func (f *File) SetRequire(req []*Require) { - type elem struct { - version string - indirect bool - } - need := make(map[string]elem) - for _, r := range req { - if prev, dup := need[r.Mod.Path]; dup && prev.version != r.Mod.Version { - panic(fmt.Errorf("SetRequire called with conflicting versions for path %s (%s and %s)", r.Mod.Path, prev.version, r.Mod.Version)) - } - need[r.Mod.Path] = elem{r.Mod.Version, r.Indirect} - } - - // Update or delete the existing Require entries to preserve - // only the first for each module path in req. - for _, r := range f.Require { - e, ok := need[r.Mod.Path] - if ok { - r.setVersion(e.version) - r.setIndirect(e.indirect) - } else { - r.markRemoved() - } - delete(need, r.Mod.Path) - } - - // Add new entries in the last block of the file for any paths that weren't - // already present. - // - // This step is nondeterministic, but the final result will be deterministic - // because we will sort the block. - for path, e := range need { - f.AddNewRequire(path, e.version, e.indirect) - } - - f.SortBlocks() -} - -// SetRequireSeparateIndirect updates the requirements of f to contain the given -// requirements. Comment contents (except for 'indirect' markings) are retained -// from the first existing requirement for each module path. Like SetRequire, -// SetRequireSeparateIndirect adds requirements for new paths in req, -// updates the version and "// indirect" comment on existing requirements, -// and deletes requirements on paths not in req. Existing duplicate requirements -// are deleted. -// -// As its name suggests, SetRequireSeparateIndirect puts direct and indirect -// requirements into two separate blocks, one containing only direct -// requirements, and the other containing only indirect requirements. -// SetRequireSeparateIndirect may move requirements between these two blocks -// when their indirect markings change. However, SetRequireSeparateIndirect -// won't move requirements from other blocks, especially blocks with comments. -// -// If the file initially has one uncommented block of requirements, -// SetRequireSeparateIndirect will split it into a direct-only and indirect-only -// block. This aids in the transition to separate blocks. -func (f *File) SetRequireSeparateIndirect(req []*Require) { - // hasComments returns whether a line or block has comments - // other than "indirect". - hasComments := func(c Comments) bool { - return len(c.Before) > 0 || len(c.After) > 0 || len(c.Suffix) > 1 || - (len(c.Suffix) == 1 && - strings.TrimSpace(strings.TrimPrefix(c.Suffix[0].Token, string(slashSlash))) != "indirect") - } - - // moveReq adds r to block. If r was in another block, moveReq deletes - // it from that block and transfers its comments. - moveReq := func(r *Require, block *LineBlock) { - var line *Line - if r.Syntax == nil { - line = &Line{Token: []string{AutoQuote(r.Mod.Path), r.Mod.Version}} - r.Syntax = line - if r.Indirect { - r.setIndirect(true) - } - } else { - line = new(Line) - *line = *r.Syntax - if !line.InBlock && len(line.Token) > 0 && line.Token[0] == "require" { - line.Token = line.Token[1:] - } - r.Syntax.Token = nil // Cleanup will delete the old line. - r.Syntax = line - } - line.InBlock = true - block.Line = append(block.Line, line) - } - - // Examine existing require lines and blocks. - var ( - // We may insert new requirements into the last uncommented - // direct-only and indirect-only blocks. We may also move requirements - // to the opposite block if their indirect markings change. - lastDirectIndex = -1 - lastIndirectIndex = -1 - - // If there are no direct-only or indirect-only blocks, a new block may - // be inserted after the last require line or block. - lastRequireIndex = -1 - - // If there's only one require line or block, and it's uncommented, - // we'll move its requirements to the direct-only or indirect-only blocks. - requireLineOrBlockCount = 0 - - // Track the block each requirement belongs to (if any) so we can - // move them later. - lineToBlock = make(map[*Line]*LineBlock) - ) - for i, stmt := range f.Syntax.Stmt { - switch stmt := stmt.(type) { - case *Line: - if len(stmt.Token) == 0 || stmt.Token[0] != "require" { - continue - } - lastRequireIndex = i - requireLineOrBlockCount++ - if !hasComments(stmt.Comments) { - if isIndirect(stmt) { - lastIndirectIndex = i - } else { - lastDirectIndex = i - } - } - - case *LineBlock: - if len(stmt.Token) == 0 || stmt.Token[0] != "require" { - continue - } - lastRequireIndex = i - requireLineOrBlockCount++ - allDirect := len(stmt.Line) > 0 && !hasComments(stmt.Comments) - allIndirect := len(stmt.Line) > 0 && !hasComments(stmt.Comments) - for _, line := range stmt.Line { - lineToBlock[line] = stmt - if hasComments(line.Comments) { - allDirect = false - allIndirect = false - } else if isIndirect(line) { - allDirect = false - } else { - allIndirect = false - } - } - if allDirect { - lastDirectIndex = i - } - if allIndirect { - lastIndirectIndex = i - } - } - } - - oneFlatUncommentedBlock := requireLineOrBlockCount == 1 && - !hasComments(*f.Syntax.Stmt[lastRequireIndex].Comment()) - - // Create direct and indirect blocks if needed. Convert lines into blocks - // if needed. If we end up with an empty block or a one-line block, - // Cleanup will delete it or convert it to a line later. - insertBlock := func(i int) *LineBlock { - block := &LineBlock{Token: []string{"require"}} - f.Syntax.Stmt = append(f.Syntax.Stmt, nil) - copy(f.Syntax.Stmt[i+1:], f.Syntax.Stmt[i:]) - f.Syntax.Stmt[i] = block - return block - } - - ensureBlock := func(i int) *LineBlock { - switch stmt := f.Syntax.Stmt[i].(type) { - case *LineBlock: - return stmt - case *Line: - block := &LineBlock{ - Token: []string{"require"}, - Line: []*Line{stmt}, - } - stmt.Token = stmt.Token[1:] // remove "require" - stmt.InBlock = true - f.Syntax.Stmt[i] = block - return block - default: - panic(fmt.Sprintf("unexpected statement: %v", stmt)) - } - } - - var lastDirectBlock *LineBlock - if lastDirectIndex < 0 { - if lastIndirectIndex >= 0 { - lastDirectIndex = lastIndirectIndex - lastIndirectIndex++ - } else if lastRequireIndex >= 0 { - lastDirectIndex = lastRequireIndex + 1 - } else { - lastDirectIndex = len(f.Syntax.Stmt) - } - lastDirectBlock = insertBlock(lastDirectIndex) - } else { - lastDirectBlock = ensureBlock(lastDirectIndex) - } - - var lastIndirectBlock *LineBlock - if lastIndirectIndex < 0 { - lastIndirectIndex = lastDirectIndex + 1 - lastIndirectBlock = insertBlock(lastIndirectIndex) - } else { - lastIndirectBlock = ensureBlock(lastIndirectIndex) - } - - // Delete requirements we don't want anymore. - // Update versions and indirect comments on requirements we want to keep. - // If a requirement is in last{Direct,Indirect}Block with the wrong - // indirect marking after this, or if the requirement is in an single - // uncommented mixed block (oneFlatUncommentedBlock), move it to the - // correct block. - // - // Some blocks may be empty after this. Cleanup will remove them. - need := make(map[string]*Require) - for _, r := range req { - need[r.Mod.Path] = r - } - have := make(map[string]*Require) - for _, r := range f.Require { - path := r.Mod.Path - if need[path] == nil || have[path] != nil { - // Requirement not needed, or duplicate requirement. Delete. - r.markRemoved() - continue - } - have[r.Mod.Path] = r - r.setVersion(need[path].Mod.Version) - r.setIndirect(need[path].Indirect) - if need[path].Indirect && - (oneFlatUncommentedBlock || lineToBlock[r.Syntax] == lastDirectBlock) { - moveReq(r, lastIndirectBlock) - } else if !need[path].Indirect && - (oneFlatUncommentedBlock || lineToBlock[r.Syntax] == lastIndirectBlock) { - moveReq(r, lastDirectBlock) - } - } - - // Add new requirements. - for path, r := range need { - if have[path] == nil { - if r.Indirect { - moveReq(r, lastIndirectBlock) - } else { - moveReq(r, lastDirectBlock) - } - f.Require = append(f.Require, r) - } - } - - f.SortBlocks() -} - -func (f *File) DropRequire(path string) error { - for _, r := range f.Require { - if r.Mod.Path == path { - r.Syntax.markRemoved() - *r = Require{} - } - } - return nil -} - -// AddExclude adds a exclude statement to the mod file. Errors if the provided -// version is not a canonical version string -func (f *File) AddExclude(path, vers string) error { - if err := checkCanonicalVersion(path, vers); err != nil { - return err - } - - var hint *Line - for _, x := range f.Exclude { - if x.Mod.Path == path && x.Mod.Version == vers { - return nil - } - if x.Mod.Path == path { - hint = x.Syntax - } - } - - f.Exclude = append(f.Exclude, &Exclude{Mod: module.Version{Path: path, Version: vers}, Syntax: f.Syntax.addLine(hint, "exclude", AutoQuote(path), vers)}) - return nil -} - -func (f *File) DropExclude(path, vers string) error { - for _, x := range f.Exclude { - if x.Mod.Path == path && x.Mod.Version == vers { - x.Syntax.markRemoved() - *x = Exclude{} - } - } - return nil -} - -func (f *File) AddReplace(oldPath, oldVers, newPath, newVers string) error { - return addReplace(f.Syntax, &f.Replace, oldPath, oldVers, newPath, newVers) -} - -func addReplace(syntax *FileSyntax, replace *[]*Replace, oldPath, oldVers, newPath, newVers string) error { - need := true - old := module.Version{Path: oldPath, Version: oldVers} - new := module.Version{Path: newPath, Version: newVers} - tokens := []string{"replace", AutoQuote(oldPath)} - if oldVers != "" { - tokens = append(tokens, oldVers) - } - tokens = append(tokens, "=>", AutoQuote(newPath)) - if newVers != "" { - tokens = append(tokens, newVers) - } - - var hint *Line - for _, r := range *replace { - if r.Old.Path == oldPath && (oldVers == "" || r.Old.Version == oldVers) { - if need { - // Found replacement for old; update to use new. - r.New = new - syntax.updateLine(r.Syntax, tokens...) - need = false - continue - } - // Already added; delete other replacements for same. - r.Syntax.markRemoved() - *r = Replace{} - } - if r.Old.Path == oldPath { - hint = r.Syntax - } - } - if need { - *replace = append(*replace, &Replace{Old: old, New: new, Syntax: syntax.addLine(hint, tokens...)}) - } - return nil -} - -func (f *File) DropReplace(oldPath, oldVers string) error { - for _, r := range f.Replace { - if r.Old.Path == oldPath && r.Old.Version == oldVers { - r.Syntax.markRemoved() - *r = Replace{} - } - } - return nil -} - -// AddRetract adds a retract statement to the mod file. Errors if the provided -// version interval does not consist of canonical version strings -func (f *File) AddRetract(vi VersionInterval, rationale string) error { - var path string - if f.Module != nil { - path = f.Module.Mod.Path - } - if err := checkCanonicalVersion(path, vi.High); err != nil { - return err - } - if err := checkCanonicalVersion(path, vi.Low); err != nil { - return err - } - - r := &Retract{ - VersionInterval: vi, - } - if vi.Low == vi.High { - r.Syntax = f.Syntax.addLine(nil, "retract", AutoQuote(vi.Low)) - } else { - r.Syntax = f.Syntax.addLine(nil, "retract", "[", AutoQuote(vi.Low), ",", AutoQuote(vi.High), "]") - } - if rationale != "" { - for _, line := range strings.Split(rationale, "\n") { - com := Comment{Token: "// " + line} - r.Syntax.Comment().Before = append(r.Syntax.Comment().Before, com) - } - } - return nil -} - -func (f *File) DropRetract(vi VersionInterval) error { - for _, r := range f.Retract { - if r.VersionInterval == vi { - r.Syntax.markRemoved() - *r = Retract{} - } - } - return nil -} - -func (f *File) SortBlocks() { - f.removeDups() // otherwise sorting is unsafe - - // semanticSortForExcludeVersionV is the Go version (plus leading "v") at which - // lines in exclude blocks start to use semantic sort instead of lexicographic sort. - // See go.dev/issue/60028. - const semanticSortForExcludeVersionV = "v1.21" - useSemanticSortForExclude := f.Go != nil && semver.Compare("v"+f.Go.Version, semanticSortForExcludeVersionV) >= 0 - - for _, stmt := range f.Syntax.Stmt { - block, ok := stmt.(*LineBlock) - if !ok { - continue - } - less := lineLess - if block.Token[0] == "exclude" && useSemanticSortForExclude { - less = lineExcludeLess - } else if block.Token[0] == "retract" { - less = lineRetractLess - } - sort.SliceStable(block.Line, func(i, j int) bool { - return less(block.Line[i], block.Line[j]) - }) - } -} - -// removeDups removes duplicate exclude and replace directives. -// -// Earlier exclude directives take priority. -// -// Later replace directives take priority. -// -// require directives are not de-duplicated. That's left up to higher-level -// logic (MVS). -// -// retract directives are not de-duplicated since comments are -// meaningful, and versions may be retracted multiple times. -func (f *File) removeDups() { - removeDups(f.Syntax, &f.Exclude, &f.Replace) -} - -func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace) { - kill := make(map[*Line]bool) - - // Remove duplicate excludes. - if exclude != nil { - haveExclude := make(map[module.Version]bool) - for _, x := range *exclude { - if haveExclude[x.Mod] { - kill[x.Syntax] = true - continue - } - haveExclude[x.Mod] = true - } - var excl []*Exclude - for _, x := range *exclude { - if !kill[x.Syntax] { - excl = append(excl, x) - } - } - *exclude = excl - } - - // Remove duplicate replacements. - // Later replacements take priority over earlier ones. - haveReplace := make(map[module.Version]bool) - for i := len(*replace) - 1; i >= 0; i-- { - x := (*replace)[i] - if haveReplace[x.Old] { - kill[x.Syntax] = true - continue - } - haveReplace[x.Old] = true - } - var repl []*Replace - for _, x := range *replace { - if !kill[x.Syntax] { - repl = append(repl, x) - } - } - *replace = repl - - // Duplicate require and retract directives are not removed. - - // Drop killed statements from the syntax tree. - var stmts []Expr - for _, stmt := range syntax.Stmt { - switch stmt := stmt.(type) { - case *Line: - if kill[stmt] { - continue - } - case *LineBlock: - var lines []*Line - for _, line := range stmt.Line { - if !kill[line] { - lines = append(lines, line) - } - } - stmt.Line = lines - if len(lines) == 0 { - continue - } - } - stmts = append(stmts, stmt) - } - syntax.Stmt = stmts -} - -// lineLess returns whether li should be sorted before lj. It sorts -// lexicographically without assigning any special meaning to tokens. -func lineLess(li, lj *Line) bool { - for k := 0; k < len(li.Token) && k < len(lj.Token); k++ { - if li.Token[k] != lj.Token[k] { - return li.Token[k] < lj.Token[k] - } - } - return len(li.Token) < len(lj.Token) -} - -// lineExcludeLess reports whether li should be sorted before lj for lines in -// an "exclude" block. -func lineExcludeLess(li, lj *Line) bool { - if len(li.Token) != 2 || len(lj.Token) != 2 { - // Not a known exclude specification. - // Fall back to sorting lexicographically. - return lineLess(li, lj) - } - // An exclude specification has two tokens: ModulePath and Version. - // Compare module path by string order and version by semver rules. - if pi, pj := li.Token[0], lj.Token[0]; pi != pj { - return pi < pj - } - return semver.Compare(li.Token[1], lj.Token[1]) < 0 -} - -// lineRetractLess returns whether li should be sorted before lj for lines in -// a "retract" block. It treats each line as a version interval. Single versions -// are compared as if they were intervals with the same low and high version. -// Intervals are sorted in descending order, first by low version, then by -// high version, using semver.Compare. -func lineRetractLess(li, lj *Line) bool { - interval := func(l *Line) VersionInterval { - if len(l.Token) == 1 { - return VersionInterval{Low: l.Token[0], High: l.Token[0]} - } else if len(l.Token) == 5 && l.Token[0] == "[" && l.Token[2] == "," && l.Token[4] == "]" { - return VersionInterval{Low: l.Token[1], High: l.Token[3]} - } else { - // Line in unknown format. Treat as an invalid version. - return VersionInterval{} - } - } - vii := interval(li) - vij := interval(lj) - if cmp := semver.Compare(vii.Low, vij.Low); cmp != 0 { - return cmp > 0 - } - return semver.Compare(vii.High, vij.High) > 0 -} - -// checkCanonicalVersion returns a non-nil error if vers is not a canonical -// version string or does not match the major version of path. -// -// If path is non-empty, the error text suggests a format with a major version -// corresponding to the path. -func checkCanonicalVersion(path, vers string) error { - _, pathMajor, pathMajorOk := module.SplitPathVersion(path) - - if vers == "" || vers != module.CanonicalVersion(vers) { - if pathMajor == "" { - return &module.InvalidVersionError{ - Version: vers, - Err: fmt.Errorf("must be of the form v1.2.3"), - } - } - return &module.InvalidVersionError{ - Version: vers, - Err: fmt.Errorf("must be of the form %s.2.3", module.PathMajorPrefix(pathMajor)), - } - } - - if pathMajorOk { - if err := module.CheckPathMajor(vers, pathMajor); err != nil { - if pathMajor == "" { - // In this context, the user probably wrote "v2.3.4" when they meant - // "v2.3.4+incompatible". Suggest that instead of "v0 or v1". - return &module.InvalidVersionError{ - Version: vers, - Err: fmt.Errorf("should be %s+incompatible (or module %s/%v)", vers, path, semver.Major(vers)), - } - } - return err - } - } - - return nil -} diff --git a/go/extractor/vendor/golang.org/x/mod/modfile/work.go b/go/extractor/vendor/golang.org/x/mod/modfile/work.go deleted file mode 100644 index d7b99376ebe7..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/modfile/work.go +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package modfile - -import ( - "fmt" - "sort" - "strings" -) - -// A WorkFile is the parsed, interpreted form of a go.work file. -type WorkFile struct { - Go *Go - Toolchain *Toolchain - Use []*Use - Replace []*Replace - - Syntax *FileSyntax -} - -// A Use is a single directory statement. -type Use struct { - Path string // Use path of module. - ModulePath string // Module path in the comment. - Syntax *Line -} - -// ParseWork parses and returns a go.work file. -// -// file is the name of the file, used in positions and errors. -// -// data is the content of the file. -// -// fix is an optional function that canonicalizes module versions. -// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] -// must return the same string). -func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { - fs, err := parse(file, data) - if err != nil { - return nil, err - } - f := &WorkFile{ - Syntax: fs, - } - var errs ErrorList - - for _, x := range fs.Stmt { - switch x := x.(type) { - case *Line: - f.add(&errs, x, x.Token[0], x.Token[1:], fix) - - case *LineBlock: - if len(x.Token) > 1 { - errs = append(errs, Error{ - Filename: file, - Pos: x.Start, - Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), - }) - continue - } - switch x.Token[0] { - default: - errs = append(errs, Error{ - Filename: file, - Pos: x.Start, - Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), - }) - continue - case "use", "replace": - for _, l := range x.Line { - f.add(&errs, l, x.Token[0], l.Token, fix) - } - } - } - } - - if len(errs) > 0 { - return nil, errs - } - return f, nil -} - -// Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like [WorkFile.DropRequire] -// clear the entry but do not remove it from the slice. -// Cleanup cleans out all the cleared entries. -func (f *WorkFile) Cleanup() { - w := 0 - for _, r := range f.Use { - if r.Path != "" { - f.Use[w] = r - w++ - } - } - f.Use = f.Use[:w] - - w = 0 - for _, r := range f.Replace { - if r.Old.Path != "" { - f.Replace[w] = r - w++ - } - } - f.Replace = f.Replace[:w] - - f.Syntax.Cleanup() -} - -func (f *WorkFile) AddGoStmt(version string) error { - if !GoVersionRE.MatchString(version) { - return fmt.Errorf("invalid language version %q", version) - } - if f.Go == nil { - stmt := &Line{Token: []string{"go", version}} - f.Go = &Go{ - Version: version, - Syntax: stmt, - } - // Find the first non-comment-only block and add - // the go statement before it. That will keep file comments at the top. - i := 0 - for i = 0; i < len(f.Syntax.Stmt); i++ { - if _, ok := f.Syntax.Stmt[i].(*CommentBlock); !ok { - break - } - } - f.Syntax.Stmt = append(append(f.Syntax.Stmt[:i:i], stmt), f.Syntax.Stmt[i:]...) - } else { - f.Go.Version = version - f.Syntax.updateLine(f.Go.Syntax, "go", version) - } - return nil -} - -func (f *WorkFile) AddToolchainStmt(name string) error { - if !ToolchainRE.MatchString(name) { - return fmt.Errorf("invalid toolchain name %q", name) - } - if f.Toolchain == nil { - stmt := &Line{Token: []string{"toolchain", name}} - f.Toolchain = &Toolchain{ - Name: name, - Syntax: stmt, - } - // Find the go line and add the toolchain line after it. - // Or else find the first non-comment-only block and add - // the toolchain line before it. That will keep file comments at the top. - i := 0 - for i = 0; i < len(f.Syntax.Stmt); i++ { - if line, ok := f.Syntax.Stmt[i].(*Line); ok && len(line.Token) > 0 && line.Token[0] == "go" { - i++ - goto Found - } - } - for i = 0; i < len(f.Syntax.Stmt); i++ { - if _, ok := f.Syntax.Stmt[i].(*CommentBlock); !ok { - break - } - } - Found: - f.Syntax.Stmt = append(append(f.Syntax.Stmt[:i:i], stmt), f.Syntax.Stmt[i:]...) - } else { - f.Toolchain.Name = name - f.Syntax.updateLine(f.Toolchain.Syntax, "toolchain", name) - } - return nil -} - -// DropGoStmt deletes the go statement from the file. -func (f *WorkFile) DropGoStmt() { - if f.Go != nil { - f.Go.Syntax.markRemoved() - f.Go = nil - } -} - -// DropToolchainStmt deletes the toolchain statement from the file. -func (f *WorkFile) DropToolchainStmt() { - if f.Toolchain != nil { - f.Toolchain.Syntax.markRemoved() - f.Toolchain = nil - } -} - -func (f *WorkFile) AddUse(diskPath, modulePath string) error { - need := true - for _, d := range f.Use { - if d.Path == diskPath { - if need { - d.ModulePath = modulePath - f.Syntax.updateLine(d.Syntax, "use", AutoQuote(diskPath)) - need = false - } else { - d.Syntax.markRemoved() - *d = Use{} - } - } - } - - if need { - f.AddNewUse(diskPath, modulePath) - } - return nil -} - -func (f *WorkFile) AddNewUse(diskPath, modulePath string) { - line := f.Syntax.addLine(nil, "use", AutoQuote(diskPath)) - f.Use = append(f.Use, &Use{Path: diskPath, ModulePath: modulePath, Syntax: line}) -} - -func (f *WorkFile) SetUse(dirs []*Use) { - need := make(map[string]string) - for _, d := range dirs { - need[d.Path] = d.ModulePath - } - - for _, d := range f.Use { - if modulePath, ok := need[d.Path]; ok { - d.ModulePath = modulePath - } else { - d.Syntax.markRemoved() - *d = Use{} - } - } - - // TODO(#45713): Add module path to comment. - - for diskPath, modulePath := range need { - f.AddNewUse(diskPath, modulePath) - } - f.SortBlocks() -} - -func (f *WorkFile) DropUse(path string) error { - for _, d := range f.Use { - if d.Path == path { - d.Syntax.markRemoved() - *d = Use{} - } - } - return nil -} - -func (f *WorkFile) AddReplace(oldPath, oldVers, newPath, newVers string) error { - return addReplace(f.Syntax, &f.Replace, oldPath, oldVers, newPath, newVers) -} - -func (f *WorkFile) DropReplace(oldPath, oldVers string) error { - for _, r := range f.Replace { - if r.Old.Path == oldPath && r.Old.Version == oldVers { - r.Syntax.markRemoved() - *r = Replace{} - } - } - return nil -} - -func (f *WorkFile) SortBlocks() { - f.removeDups() // otherwise sorting is unsafe - - for _, stmt := range f.Syntax.Stmt { - block, ok := stmt.(*LineBlock) - if !ok { - continue - } - sort.SliceStable(block.Line, func(i, j int) bool { - return lineLess(block.Line[i], block.Line[j]) - }) - } -} - -// removeDups removes duplicate replace directives. -// -// Later replace directives take priority. -// -// require directives are not de-duplicated. That's left up to higher-level -// logic (MVS). -// -// retract directives are not de-duplicated since comments are -// meaningful, and versions may be retracted multiple times. -func (f *WorkFile) removeDups() { - removeDups(f.Syntax, nil, &f.Replace) -} diff --git a/go/extractor/vendor/golang.org/x/mod/module/BUILD.bazel b/go/extractor/vendor/golang.org/x/mod/module/BUILD.bazel deleted file mode 100644 index 3bf5ae9997d1..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/module/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "module", - srcs = [ - "module.go", - "pseudo.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/mod/module", - importpath = "golang.org/x/mod/module", - visibility = ["//visibility:public"], - deps = [ - "//go/extractor/vendor/golang.org/x/mod/internal/lazyregexp", - "//go/extractor/vendor/golang.org/x/mod/semver", - ], -) diff --git a/go/extractor/vendor/golang.org/x/mod/module/module.go b/go/extractor/vendor/golang.org/x/mod/module/module.go deleted file mode 100644 index 2a364b229b9f..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/module/module.go +++ /dev/null @@ -1,841 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package module defines the module.Version type along with support code. -// -// The [module.Version] type is a simple Path, Version pair: -// -// type Version struct { -// Path string -// Version string -// } -// -// There are no restrictions imposed directly by use of this structure, -// but additional checking functions, most notably [Check], verify that -// a particular path, version pair is valid. -// -// # Escaped Paths -// -// Module paths appear as substrings of file system paths -// (in the download cache) and of web server URLs in the proxy protocol. -// In general we cannot rely on file systems to be case-sensitive, -// nor can we rely on web servers, since they read from file systems. -// That is, we cannot rely on the file system to keep rsc.io/QUOTE -// and rsc.io/quote separate. Windows and macOS don't. -// Instead, we must never require two different casings of a file path. -// Because we want the download cache to match the proxy protocol, -// and because we want the proxy protocol to be possible to serve -// from a tree of static files (which might be stored on a case-insensitive -// file system), the proxy protocol must never require two different casings -// of a URL path either. -// -// One possibility would be to make the escaped form be the lowercase -// hexadecimal encoding of the actual path bytes. This would avoid ever -// needing different casings of a file path, but it would be fairly illegible -// to most programmers when those paths appeared in the file system -// (including in file paths in compiler errors and stack traces) -// in web server logs, and so on. Instead, we want a safe escaped form that -// leaves most paths unaltered. -// -// The safe escaped form is to replace every uppercase letter -// with an exclamation mark followed by the letter's lowercase equivalent. -// -// For example, -// -// github.com/Azure/azure-sdk-for-go -> github.com/!azure/azure-sdk-for-go. -// github.com/GoogleCloudPlatform/cloudsql-proxy -> github.com/!google!cloud!platform/cloudsql-proxy -// github.com/Sirupsen/logrus -> github.com/!sirupsen/logrus. -// -// Import paths that avoid upper-case letters are left unchanged. -// Note that because import paths are ASCII-only and avoid various -// problematic punctuation (like : < and >), the escaped form is also ASCII-only -// and avoids the same problematic punctuation. -// -// Import paths have never allowed exclamation marks, so there is no -// need to define how to escape a literal !. -// -// # Unicode Restrictions -// -// Today, paths are disallowed from using Unicode. -// -// Although paths are currently disallowed from using Unicode, -// we would like at some point to allow Unicode letters as well, to assume that -// file systems and URLs are Unicode-safe (storing UTF-8), and apply -// the !-for-uppercase convention for escaping them in the file system. -// But there are at least two subtle considerations. -// -// First, note that not all case-fold equivalent distinct runes -// form an upper/lower pair. -// For example, U+004B ('K'), U+006B ('k'), and U+212A ('K' for Kelvin) -// are three distinct runes that case-fold to each other. -// When we do add Unicode letters, we must not assume that upper/lower -// are the only case-equivalent pairs. -// Perhaps the Kelvin symbol would be disallowed entirely, for example. -// Or perhaps it would escape as "!!k", or perhaps as "(212A)". -// -// Second, it would be nice to allow Unicode marks as well as letters, -// but marks include combining marks, and then we must deal not -// only with case folding but also normalization: both U+00E9 ('é') -// and U+0065 U+0301 ('e' followed by combining acute accent) -// look the same on the page and are treated by some file systems -// as the same path. If we do allow Unicode marks in paths, there -// must be some kind of normalization to allow only one canonical -// encoding of any character used in an import path. -package module - -// IMPORTANT NOTE -// -// This file essentially defines the set of valid import paths for the go command. -// There are many subtle considerations, including Unicode ambiguity, -// security, network, and file system representations. -// -// This file also defines the set of valid module path and version combinations, -// another topic with many subtle considerations. -// -// Changes to the semantics in this file require approval from rsc. - -import ( - "errors" - "fmt" - "path" - "sort" - "strings" - "unicode" - "unicode/utf8" - - "golang.org/x/mod/semver" -) - -// A Version (for clients, a module.Version) is defined by a module path and version pair. -// These are stored in their plain (unescaped) form. -type Version struct { - // Path is a module path, like "golang.org/x/text" or "rsc.io/quote/v2". - Path string - - // Version is usually a semantic version in canonical form. - // There are three exceptions to this general rule. - // First, the top-level target of a build has no specific version - // and uses Version = "". - // Second, during MVS calculations the version "none" is used - // to represent the decision to take no version of a given module. - // Third, filesystem paths found in "replace" directives are - // represented by a path with an empty version. - Version string `json:",omitempty"` -} - -// String returns a representation of the Version suitable for logging -// (Path@Version, or just Path if Version is empty). -func (m Version) String() string { - if m.Version == "" { - return m.Path - } - return m.Path + "@" + m.Version -} - -// A ModuleError indicates an error specific to a module. -type ModuleError struct { - Path string - Version string - Err error -} - -// VersionError returns a [ModuleError] derived from a [Version] and error, -// or err itself if it is already such an error. -func VersionError(v Version, err error) error { - var mErr *ModuleError - if errors.As(err, &mErr) && mErr.Path == v.Path && mErr.Version == v.Version { - return err - } - return &ModuleError{ - Path: v.Path, - Version: v.Version, - Err: err, - } -} - -func (e *ModuleError) Error() string { - if v, ok := e.Err.(*InvalidVersionError); ok { - return fmt.Sprintf("%s@%s: invalid %s: %v", e.Path, v.Version, v.noun(), v.Err) - } - if e.Version != "" { - return fmt.Sprintf("%s@%s: %v", e.Path, e.Version, e.Err) - } - return fmt.Sprintf("module %s: %v", e.Path, e.Err) -} - -func (e *ModuleError) Unwrap() error { return e.Err } - -// An InvalidVersionError indicates an error specific to a version, with the -// module path unknown or specified externally. -// -// A [ModuleError] may wrap an InvalidVersionError, but an InvalidVersionError -// must not wrap a ModuleError. -type InvalidVersionError struct { - Version string - Pseudo bool - Err error -} - -// noun returns either "version" or "pseudo-version", depending on whether -// e.Version is a pseudo-version. -func (e *InvalidVersionError) noun() string { - if e.Pseudo { - return "pseudo-version" - } - return "version" -} - -func (e *InvalidVersionError) Error() string { - return fmt.Sprintf("%s %q invalid: %s", e.noun(), e.Version, e.Err) -} - -func (e *InvalidVersionError) Unwrap() error { return e.Err } - -// An InvalidPathError indicates a module, import, or file path doesn't -// satisfy all naming constraints. See [CheckPath], [CheckImportPath], -// and [CheckFilePath] for specific restrictions. -type InvalidPathError struct { - Kind string // "module", "import", or "file" - Path string - Err error -} - -func (e *InvalidPathError) Error() string { - return fmt.Sprintf("malformed %s path %q: %v", e.Kind, e.Path, e.Err) -} - -func (e *InvalidPathError) Unwrap() error { return e.Err } - -// Check checks that a given module path, version pair is valid. -// In addition to the path being a valid module path -// and the version being a valid semantic version, -// the two must correspond. -// For example, the path "yaml/v2" only corresponds to -// semantic versions beginning with "v2.". -func Check(path, version string) error { - if err := CheckPath(path); err != nil { - return err - } - if !semver.IsValid(version) { - return &ModuleError{ - Path: path, - Err: &InvalidVersionError{Version: version, Err: errors.New("not a semantic version")}, - } - } - _, pathMajor, _ := SplitPathVersion(path) - if err := CheckPathMajor(version, pathMajor); err != nil { - return &ModuleError{Path: path, Err: err} - } - return nil -} - -// firstPathOK reports whether r can appear in the first element of a module path. -// The first element of the path must be an LDH domain name, at least for now. -// To avoid case ambiguity, the domain name must be entirely lower case. -func firstPathOK(r rune) bool { - return r == '-' || r == '.' || - '0' <= r && r <= '9' || - 'a' <= r && r <= 'z' -} - -// modPathOK reports whether r can appear in a module path element. -// Paths can be ASCII letters, ASCII digits, and limited ASCII punctuation: - . _ and ~. -// -// This matches what "go get" has historically recognized in import paths, -// and avoids confusing sequences like '%20' or '+' that would change meaning -// if used in a URL. -// -// TODO(rsc): We would like to allow Unicode letters, but that requires additional -// care in the safe encoding (see "escaped paths" above). -func modPathOK(r rune) bool { - if r < utf8.RuneSelf { - return r == '-' || r == '.' || r == '_' || r == '~' || - '0' <= r && r <= '9' || - 'A' <= r && r <= 'Z' || - 'a' <= r && r <= 'z' - } - return false -} - -// importPathOK reports whether r can appear in a package import path element. -// -// Import paths are intermediate between module paths and file paths: we allow -// disallow characters that would be confusing or ambiguous as arguments to -// 'go get' (such as '@' and ' ' ), but allow certain characters that are -// otherwise-unambiguous on the command line and historically used for some -// binary names (such as '++' as a suffix for compiler binaries and wrappers). -func importPathOK(r rune) bool { - return modPathOK(r) || r == '+' -} - -// fileNameOK reports whether r can appear in a file name. -// For now we allow all Unicode letters but otherwise limit to pathOK plus a few more punctuation characters. -// If we expand the set of allowed characters here, we have to -// work harder at detecting potential case-folding and normalization collisions. -// See note about "escaped paths" above. -func fileNameOK(r rune) bool { - if r < utf8.RuneSelf { - // Entire set of ASCII punctuation, from which we remove characters: - // ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ - // We disallow some shell special characters: " ' * < > ? ` | - // (Note that some of those are disallowed by the Windows file system as well.) - // We also disallow path separators / : and \ (fileNameOK is only called on path element characters). - // We allow spaces (U+0020) in file names. - const allowed = "!#$%&()+,-.=@[]^_{}~ " - if '0' <= r && r <= '9' || 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' { - return true - } - return strings.ContainsRune(allowed, r) - } - // It may be OK to add more ASCII punctuation here, but only carefully. - // For example Windows disallows < > \, and macOS disallows :, so we must not allow those. - return unicode.IsLetter(r) -} - -// CheckPath checks that a module path is valid. -// A valid module path is a valid import path, as checked by [CheckImportPath], -// with three additional constraints. -// First, the leading path element (up to the first slash, if any), -// by convention a domain name, must contain only lower-case ASCII letters, -// ASCII digits, dots (U+002E), and dashes (U+002D); -// it must contain at least one dot and cannot start with a dash. -// Second, for a final path element of the form /vN, where N looks numeric -// (ASCII digits and dots) must not begin with a leading zero, must not be /v1, -// and must not contain any dots. For paths beginning with "gopkg.in/", -// this second requirement is replaced by a requirement that the path -// follow the gopkg.in server's conventions. -// Third, no path element may begin with a dot. -func CheckPath(path string) (err error) { - defer func() { - if err != nil { - err = &InvalidPathError{Kind: "module", Path: path, Err: err} - } - }() - - if err := checkPath(path, modulePath); err != nil { - return err - } - i := strings.Index(path, "/") - if i < 0 { - i = len(path) - } - if i == 0 { - return fmt.Errorf("leading slash") - } - if !strings.Contains(path[:i], ".") { - return fmt.Errorf("missing dot in first path element") - } - if path[0] == '-' { - return fmt.Errorf("leading dash in first path element") - } - for _, r := range path[:i] { - if !firstPathOK(r) { - return fmt.Errorf("invalid char %q in first path element", r) - } - } - if _, _, ok := SplitPathVersion(path); !ok { - return fmt.Errorf("invalid version") - } - return nil -} - -// CheckImportPath checks that an import path is valid. -// -// A valid import path consists of one or more valid path elements -// separated by slashes (U+002F). (It must not begin with nor end in a slash.) -// -// A valid path element is a non-empty string made up of -// ASCII letters, ASCII digits, and limited ASCII punctuation: - . _ and ~. -// It must not end with a dot (U+002E), nor contain two dots in a row. -// -// The element prefix up to the first dot must not be a reserved file name -// on Windows, regardless of case (CON, com1, NuL, and so on). The element -// must not have a suffix of a tilde followed by one or more ASCII digits -// (to exclude paths elements that look like Windows short-names). -// -// CheckImportPath may be less restrictive in the future, but see the -// top-level package documentation for additional information about -// subtleties of Unicode. -func CheckImportPath(path string) error { - if err := checkPath(path, importPath); err != nil { - return &InvalidPathError{Kind: "import", Path: path, Err: err} - } - return nil -} - -// pathKind indicates what kind of path we're checking. Module paths, -// import paths, and file paths have different restrictions. -type pathKind int - -const ( - modulePath pathKind = iota - importPath - filePath -) - -// checkPath checks that a general path is valid. kind indicates what -// specific constraints should be applied. -// -// checkPath returns an error describing why the path is not valid. -// Because these checks apply to module, import, and file paths, -// and because other checks may be applied, the caller is expected to wrap -// this error with [InvalidPathError]. -func checkPath(path string, kind pathKind) error { - if !utf8.ValidString(path) { - return fmt.Errorf("invalid UTF-8") - } - if path == "" { - return fmt.Errorf("empty string") - } - if path[0] == '-' && kind != filePath { - return fmt.Errorf("leading dash") - } - if strings.Contains(path, "//") { - return fmt.Errorf("double slash") - } - if path[len(path)-1] == '/' { - return fmt.Errorf("trailing slash") - } - elemStart := 0 - for i, r := range path { - if r == '/' { - if err := checkElem(path[elemStart:i], kind); err != nil { - return err - } - elemStart = i + 1 - } - } - if err := checkElem(path[elemStart:], kind); err != nil { - return err - } - return nil -} - -// checkElem checks whether an individual path element is valid. -func checkElem(elem string, kind pathKind) error { - if elem == "" { - return fmt.Errorf("empty path element") - } - if strings.Count(elem, ".") == len(elem) { - return fmt.Errorf("invalid path element %q", elem) - } - if elem[0] == '.' && kind == modulePath { - return fmt.Errorf("leading dot in path element") - } - if elem[len(elem)-1] == '.' { - return fmt.Errorf("trailing dot in path element") - } - for _, r := range elem { - ok := false - switch kind { - case modulePath: - ok = modPathOK(r) - case importPath: - ok = importPathOK(r) - case filePath: - ok = fileNameOK(r) - default: - panic(fmt.Sprintf("internal error: invalid kind %v", kind)) - } - if !ok { - return fmt.Errorf("invalid char %q", r) - } - } - - // Windows disallows a bunch of path elements, sadly. - // See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file - short := elem - if i := strings.Index(short, "."); i >= 0 { - short = short[:i] - } - for _, bad := range badWindowsNames { - if strings.EqualFold(bad, short) { - return fmt.Errorf("%q disallowed as path element component on Windows", short) - } - } - - if kind == filePath { - // don't check for Windows short-names in file names. They're - // only an issue for import paths. - return nil - } - - // Reject path components that look like Windows short-names. - // Those usually end in a tilde followed by one or more ASCII digits. - if tilde := strings.LastIndexByte(short, '~'); tilde >= 0 && tilde < len(short)-1 { - suffix := short[tilde+1:] - suffixIsDigits := true - for _, r := range suffix { - if r < '0' || r > '9' { - suffixIsDigits = false - break - } - } - if suffixIsDigits { - return fmt.Errorf("trailing tilde and digits in path element") - } - } - - return nil -} - -// CheckFilePath checks that a slash-separated file path is valid. -// The definition of a valid file path is the same as the definition -// of a valid import path except that the set of allowed characters is larger: -// all Unicode letters, ASCII digits, the ASCII space character (U+0020), -// and the ASCII punctuation characters -// “!#$%&()+,-.=@[]^_{}~”. -// (The excluded punctuation characters, " * < > ? ` ' | / \ and :, -// have special meanings in certain shells or operating systems.) -// -// CheckFilePath may be less restrictive in the future, but see the -// top-level package documentation for additional information about -// subtleties of Unicode. -func CheckFilePath(path string) error { - if err := checkPath(path, filePath); err != nil { - return &InvalidPathError{Kind: "file", Path: path, Err: err} - } - return nil -} - -// badWindowsNames are the reserved file path elements on Windows. -// See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file -var badWindowsNames = []string{ - "CON", - "PRN", - "AUX", - "NUL", - "COM1", - "COM2", - "COM3", - "COM4", - "COM5", - "COM6", - "COM7", - "COM8", - "COM9", - "LPT1", - "LPT2", - "LPT3", - "LPT4", - "LPT5", - "LPT6", - "LPT7", - "LPT8", - "LPT9", -} - -// SplitPathVersion returns prefix and major version such that prefix+pathMajor == path -// and version is either empty or "/vN" for N >= 2. -// As a special case, gopkg.in paths are recognized directly; -// they require ".vN" instead of "/vN", and for all N, not just N >= 2. -// SplitPathVersion returns with ok = false when presented with -// a path whose last path element does not satisfy the constraints -// applied by [CheckPath], such as "example.com/pkg/v1" or "example.com/pkg/v1.2". -func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) { - if strings.HasPrefix(path, "gopkg.in/") { - return splitGopkgIn(path) - } - - i := len(path) - dot := false - for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9' || path[i-1] == '.') { - if path[i-1] == '.' { - dot = true - } - i-- - } - if i <= 1 || i == len(path) || path[i-1] != 'v' || path[i-2] != '/' { - return path, "", true - } - prefix, pathMajor = path[:i-2], path[i-2:] - if dot || len(pathMajor) <= 2 || pathMajor[2] == '0' || pathMajor == "/v1" { - return path, "", false - } - return prefix, pathMajor, true -} - -// splitGopkgIn is like SplitPathVersion but only for gopkg.in paths. -func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) { - if !strings.HasPrefix(path, "gopkg.in/") { - return path, "", false - } - i := len(path) - if strings.HasSuffix(path, "-unstable") { - i -= len("-unstable") - } - for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9') { - i-- - } - if i <= 1 || path[i-1] != 'v' || path[i-2] != '.' { - // All gopkg.in paths must end in vN for some N. - return path, "", false - } - prefix, pathMajor = path[:i-2], path[i-2:] - if len(pathMajor) <= 2 || pathMajor[2] == '0' && pathMajor != ".v0" { - return path, "", false - } - return prefix, pathMajor, true -} - -// MatchPathMajor reports whether the semantic version v -// matches the path major version pathMajor. -// -// MatchPathMajor returns true if and only if [CheckPathMajor] returns nil. -func MatchPathMajor(v, pathMajor string) bool { - return CheckPathMajor(v, pathMajor) == nil -} - -// CheckPathMajor returns a non-nil error if the semantic version v -// does not match the path major version pathMajor. -func CheckPathMajor(v, pathMajor string) error { - // TODO(jayconrod): return errors or panic for invalid inputs. This function - // (and others) was covered by integration tests for cmd/go, and surrounding - // code protected against invalid inputs like non-canonical versions. - if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") { - pathMajor = strings.TrimSuffix(pathMajor, "-unstable") - } - if strings.HasPrefix(v, "v0.0.0-") && pathMajor == ".v1" { - // Allow old bug in pseudo-versions that generated v0.0.0- pseudoversion for gopkg .v1. - // For example, gopkg.in/yaml.v2@v2.2.1's go.mod requires gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405. - return nil - } - m := semver.Major(v) - if pathMajor == "" { - if m == "v0" || m == "v1" || semver.Build(v) == "+incompatible" { - return nil - } - pathMajor = "v0 or v1" - } else if pathMajor[0] == '/' || pathMajor[0] == '.' { - if m == pathMajor[1:] { - return nil - } - pathMajor = pathMajor[1:] - } - return &InvalidVersionError{ - Version: v, - Err: fmt.Errorf("should be %s, not %s", pathMajor, semver.Major(v)), - } -} - -// PathMajorPrefix returns the major-version tag prefix implied by pathMajor. -// An empty PathMajorPrefix allows either v0 or v1. -// -// Note that [MatchPathMajor] may accept some versions that do not actually begin -// with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1' -// pathMajor, even though that pathMajor implies 'v1' tagging. -func PathMajorPrefix(pathMajor string) string { - if pathMajor == "" { - return "" - } - if pathMajor[0] != '/' && pathMajor[0] != '.' { - panic("pathMajor suffix " + pathMajor + " passed to PathMajorPrefix lacks separator") - } - if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") { - pathMajor = strings.TrimSuffix(pathMajor, "-unstable") - } - m := pathMajor[1:] - if m != semver.Major(m) { - panic("pathMajor suffix " + pathMajor + "passed to PathMajorPrefix is not a valid major version") - } - return m -} - -// CanonicalVersion returns the canonical form of the version string v. -// It is the same as [semver.Canonical] except that it preserves the special build suffix "+incompatible". -func CanonicalVersion(v string) string { - cv := semver.Canonical(v) - if semver.Build(v) == "+incompatible" { - cv += "+incompatible" - } - return cv -} - -// Sort sorts the list by Path, breaking ties by comparing [Version] fields. -// The Version fields are interpreted as semantic versions (using [semver.Compare]) -// optionally followed by a tie-breaking suffix introduced by a slash character, -// like in "v0.0.1/go.mod". -func Sort(list []Version) { - sort.Slice(list, func(i, j int) bool { - mi := list[i] - mj := list[j] - if mi.Path != mj.Path { - return mi.Path < mj.Path - } - // To help go.sum formatting, allow version/file. - // Compare semver prefix by semver rules, - // file by string order. - vi := mi.Version - vj := mj.Version - var fi, fj string - if k := strings.Index(vi, "/"); k >= 0 { - vi, fi = vi[:k], vi[k:] - } - if k := strings.Index(vj, "/"); k >= 0 { - vj, fj = vj[:k], vj[k:] - } - if vi != vj { - return semver.Compare(vi, vj) < 0 - } - return fi < fj - }) -} - -// EscapePath returns the escaped form of the given module path. -// It fails if the module path is invalid. -func EscapePath(path string) (escaped string, err error) { - if err := CheckPath(path); err != nil { - return "", err - } - - return escapeString(path) -} - -// EscapeVersion returns the escaped form of the given module version. -// Versions are allowed to be in non-semver form but must be valid file names -// and not contain exclamation marks. -func EscapeVersion(v string) (escaped string, err error) { - if err := checkElem(v, filePath); err != nil || strings.Contains(v, "!") { - return "", &InvalidVersionError{ - Version: v, - Err: fmt.Errorf("disallowed version string"), - } - } - return escapeString(v) -} - -func escapeString(s string) (escaped string, err error) { - haveUpper := false - for _, r := range s { - if r == '!' || r >= utf8.RuneSelf { - // This should be disallowed by CheckPath, but diagnose anyway. - // The correctness of the escaping loop below depends on it. - return "", fmt.Errorf("internal error: inconsistency in EscapePath") - } - if 'A' <= r && r <= 'Z' { - haveUpper = true - } - } - - if !haveUpper { - return s, nil - } - - var buf []byte - for _, r := range s { - if 'A' <= r && r <= 'Z' { - buf = append(buf, '!', byte(r+'a'-'A')) - } else { - buf = append(buf, byte(r)) - } - } - return string(buf), nil -} - -// UnescapePath returns the module path for the given escaped path. -// It fails if the escaped path is invalid or describes an invalid path. -func UnescapePath(escaped string) (path string, err error) { - path, ok := unescapeString(escaped) - if !ok { - return "", fmt.Errorf("invalid escaped module path %q", escaped) - } - if err := CheckPath(path); err != nil { - return "", fmt.Errorf("invalid escaped module path %q: %v", escaped, err) - } - return path, nil -} - -// UnescapeVersion returns the version string for the given escaped version. -// It fails if the escaped form is invalid or describes an invalid version. -// Versions are allowed to be in non-semver form but must be valid file names -// and not contain exclamation marks. -func UnescapeVersion(escaped string) (v string, err error) { - v, ok := unescapeString(escaped) - if !ok { - return "", fmt.Errorf("invalid escaped version %q", escaped) - } - if err := checkElem(v, filePath); err != nil { - return "", fmt.Errorf("invalid escaped version %q: %v", v, err) - } - return v, nil -} - -func unescapeString(escaped string) (string, bool) { - var buf []byte - - bang := false - for _, r := range escaped { - if r >= utf8.RuneSelf { - return "", false - } - if bang { - bang = false - if r < 'a' || 'z' < r { - return "", false - } - buf = append(buf, byte(r+'A'-'a')) - continue - } - if r == '!' { - bang = true - continue - } - if 'A' <= r && r <= 'Z' { - return "", false - } - buf = append(buf, byte(r)) - } - if bang { - return "", false - } - return string(buf), true -} - -// MatchPrefixPatterns reports whether any path prefix of target matches one of -// the glob patterns (as defined by [path.Match]) in the comma-separated globs -// list. This implements the algorithm used when matching a module path to the -// GOPRIVATE environment variable, as described by 'go help module-private'. -// -// It ignores any empty or malformed patterns in the list. -// Trailing slashes on patterns are ignored. -func MatchPrefixPatterns(globs, target string) bool { - for globs != "" { - // Extract next non-empty glob in comma-separated list. - var glob string - if i := strings.Index(globs, ","); i >= 0 { - glob, globs = globs[:i], globs[i+1:] - } else { - glob, globs = globs, "" - } - glob = strings.TrimSuffix(glob, "/") - if glob == "" { - continue - } - - // A glob with N+1 path elements (N slashes) needs to be matched - // against the first N+1 path elements of target, - // which end just before the N+1'th slash. - n := strings.Count(glob, "/") - prefix := target - // Walk target, counting slashes, truncating at the N+1'th slash. - for i := 0; i < len(target); i++ { - if target[i] == '/' { - if n == 0 { - prefix = target[:i] - break - } - n-- - } - } - if n > 0 { - // Not enough prefix elements. - continue - } - matched, _ := path.Match(glob, prefix) - if matched { - return true - } - } - return false -} diff --git a/go/extractor/vendor/golang.org/x/mod/module/pseudo.go b/go/extractor/vendor/golang.org/x/mod/module/pseudo.go deleted file mode 100644 index 9cf19d3254eb..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/module/pseudo.go +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Pseudo-versions -// -// Code authors are expected to tag the revisions they want users to use, -// including prereleases. However, not all authors tag versions at all, -// and not all commits a user might want to try will have tags. -// A pseudo-version is a version with a special form that allows us to -// address an untagged commit and order that version with respect to -// other versions we might encounter. -// -// A pseudo-version takes one of the general forms: -// -// (1) vX.0.0-yyyymmddhhmmss-abcdef123456 -// (2) vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456 -// (3) vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456+incompatible -// (4) vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456 -// (5) vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456+incompatible -// -// If there is no recently tagged version with the right major version vX, -// then form (1) is used, creating a space of pseudo-versions at the bottom -// of the vX version range, less than any tagged version, including the unlikely v0.0.0. -// -// If the most recent tagged version before the target commit is vX.Y.Z or vX.Y.Z+incompatible, -// then the pseudo-version uses form (2) or (3), making it a prerelease for the next -// possible semantic version after vX.Y.Z. The leading 0 segment in the prerelease string -// ensures that the pseudo-version compares less than possible future explicit prereleases -// like vX.Y.(Z+1)-rc1 or vX.Y.(Z+1)-1. -// -// If the most recent tagged version before the target commit is vX.Y.Z-pre or vX.Y.Z-pre+incompatible, -// then the pseudo-version uses form (4) or (5), making it a slightly later prerelease. - -package module - -import ( - "errors" - "fmt" - "strings" - "time" - - "golang.org/x/mod/internal/lazyregexp" - "golang.org/x/mod/semver" -) - -var pseudoVersionRE = lazyregexp.New(`^v[0-9]+\.(0\.0-|\d+\.\d+-([^+]*\.)?0\.)\d{14}-[A-Za-z0-9]+(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$`) - -const PseudoVersionTimestampFormat = "20060102150405" - -// PseudoVersion returns a pseudo-version for the given major version ("v1") -// preexisting older tagged version ("" or "v1.2.3" or "v1.2.3-pre"), revision time, -// and revision identifier (usually a 12-byte commit hash prefix). -func PseudoVersion(major, older string, t time.Time, rev string) string { - if major == "" { - major = "v0" - } - segment := fmt.Sprintf("%s-%s", t.UTC().Format(PseudoVersionTimestampFormat), rev) - build := semver.Build(older) - older = semver.Canonical(older) - if older == "" { - return major + ".0.0-" + segment // form (1) - } - if semver.Prerelease(older) != "" { - return older + ".0." + segment + build // form (4), (5) - } - - // Form (2), (3). - // Extract patch from vMAJOR.MINOR.PATCH - i := strings.LastIndex(older, ".") + 1 - v, patch := older[:i], older[i:] - - // Reassemble. - return v + incDecimal(patch) + "-0." + segment + build -} - -// ZeroPseudoVersion returns a pseudo-version with a zero timestamp and -// revision, which may be used as a placeholder. -func ZeroPseudoVersion(major string) string { - return PseudoVersion(major, "", time.Time{}, "000000000000") -} - -// incDecimal returns the decimal string incremented by 1. -func incDecimal(decimal string) string { - // Scan right to left turning 9s to 0s until you find a digit to increment. - digits := []byte(decimal) - i := len(digits) - 1 - for ; i >= 0 && digits[i] == '9'; i-- { - digits[i] = '0' - } - if i >= 0 { - digits[i]++ - } else { - // digits is all zeros - digits[0] = '1' - digits = append(digits, '0') - } - return string(digits) -} - -// decDecimal returns the decimal string decremented by 1, or the empty string -// if the decimal is all zeroes. -func decDecimal(decimal string) string { - // Scan right to left turning 0s to 9s until you find a digit to decrement. - digits := []byte(decimal) - i := len(digits) - 1 - for ; i >= 0 && digits[i] == '0'; i-- { - digits[i] = '9' - } - if i < 0 { - // decimal is all zeros - return "" - } - if i == 0 && digits[i] == '1' && len(digits) > 1 { - digits = digits[1:] - } else { - digits[i]-- - } - return string(digits) -} - -// IsPseudoVersion reports whether v is a pseudo-version. -func IsPseudoVersion(v string) bool { - return strings.Count(v, "-") >= 2 && semver.IsValid(v) && pseudoVersionRE.MatchString(v) -} - -// IsZeroPseudoVersion returns whether v is a pseudo-version with a zero base, -// timestamp, and revision, as returned by [ZeroPseudoVersion]. -func IsZeroPseudoVersion(v string) bool { - return v == ZeroPseudoVersion(semver.Major(v)) -} - -// PseudoVersionTime returns the time stamp of the pseudo-version v. -// It returns an error if v is not a pseudo-version or if the time stamp -// embedded in the pseudo-version is not a valid time. -func PseudoVersionTime(v string) (time.Time, error) { - _, timestamp, _, _, err := parsePseudoVersion(v) - if err != nil { - return time.Time{}, err - } - t, err := time.Parse("20060102150405", timestamp) - if err != nil { - return time.Time{}, &InvalidVersionError{ - Version: v, - Pseudo: true, - Err: fmt.Errorf("malformed time %q", timestamp), - } - } - return t, nil -} - -// PseudoVersionRev returns the revision identifier of the pseudo-version v. -// It returns an error if v is not a pseudo-version. -func PseudoVersionRev(v string) (rev string, err error) { - _, _, rev, _, err = parsePseudoVersion(v) - return -} - -// PseudoVersionBase returns the canonical parent version, if any, upon which -// the pseudo-version v is based. -// -// If v has no parent version (that is, if it is "vX.0.0-[…]"), -// PseudoVersionBase returns the empty string and a nil error. -func PseudoVersionBase(v string) (string, error) { - base, _, _, build, err := parsePseudoVersion(v) - if err != nil { - return "", err - } - - switch pre := semver.Prerelease(base); pre { - case "": - // vX.0.0-yyyymmddhhmmss-abcdef123456 → "" - if build != "" { - // Pseudo-versions of the form vX.0.0-yyyymmddhhmmss-abcdef123456+incompatible - // are nonsensical: the "vX.0.0-" prefix implies that there is no parent tag, - // but the "+incompatible" suffix implies that the major version of - // the parent tag is not compatible with the module's import path. - // - // There are a few such entries in the index generated by proxy.golang.org, - // but we believe those entries were generated by the proxy itself. - return "", &InvalidVersionError{ - Version: v, - Pseudo: true, - Err: fmt.Errorf("lacks base version, but has build metadata %q", build), - } - } - return "", nil - - case "-0": - // vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456 → vX.Y.Z - // vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdef123456+incompatible → vX.Y.Z+incompatible - base = strings.TrimSuffix(base, pre) - i := strings.LastIndexByte(base, '.') - if i < 0 { - panic("base from parsePseudoVersion missing patch number: " + base) - } - patch := decDecimal(base[i+1:]) - if patch == "" { - // vX.0.0-0 is invalid, but has been observed in the wild in the index - // generated by requests to proxy.golang.org. - // - // NOTE(bcmills): I cannot find a historical bug that accounts for - // pseudo-versions of this form, nor have I seen such versions in any - // actual go.mod files. If we find actual examples of this form and a - // reasonable theory of how they came into existence, it seems fine to - // treat them as equivalent to vX.0.0 (especially since the invalid - // pseudo-versions have lower precedence than the real ones). For now, we - // reject them. - return "", &InvalidVersionError{ - Version: v, - Pseudo: true, - Err: fmt.Errorf("version before %s would have negative patch number", base), - } - } - return base[:i+1] + patch + build, nil - - default: - // vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456 → vX.Y.Z-pre - // vX.Y.Z-pre.0.yyyymmddhhmmss-abcdef123456+incompatible → vX.Y.Z-pre+incompatible - if !strings.HasSuffix(base, ".0") { - panic(`base from parsePseudoVersion missing ".0" before date: ` + base) - } - return strings.TrimSuffix(base, ".0") + build, nil - } -} - -var errPseudoSyntax = errors.New("syntax error") - -func parsePseudoVersion(v string) (base, timestamp, rev, build string, err error) { - if !IsPseudoVersion(v) { - return "", "", "", "", &InvalidVersionError{ - Version: v, - Pseudo: true, - Err: errPseudoSyntax, - } - } - build = semver.Build(v) - v = strings.TrimSuffix(v, build) - j := strings.LastIndex(v, "-") - v, rev = v[:j], v[j+1:] - i := strings.LastIndex(v, "-") - if j := strings.LastIndex(v, "."); j > i { - base = v[:j] // "vX.Y.Z-pre.0" or "vX.Y.(Z+1)-0" - timestamp = v[j+1:] - } else { - base = v[:i] // "vX.0.0" - timestamp = v[i+1:] - } - return base, timestamp, rev, build, nil -} diff --git a/go/extractor/vendor/golang.org/x/mod/semver/BUILD.bazel b/go/extractor/vendor/golang.org/x/mod/semver/BUILD.bazel deleted file mode 100644 index 760be56c9e08..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/semver/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "semver", - srcs = ["semver.go"], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/mod/semver", - importpath = "golang.org/x/mod/semver", - visibility = ["//visibility:public"], -) diff --git a/go/extractor/vendor/golang.org/x/mod/semver/semver.go b/go/extractor/vendor/golang.org/x/mod/semver/semver.go deleted file mode 100644 index 9a2dfd33a770..000000000000 --- a/go/extractor/vendor/golang.org/x/mod/semver/semver.go +++ /dev/null @@ -1,401 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package semver implements comparison of semantic version strings. -// In this package, semantic version strings must begin with a leading "v", -// as in "v1.0.0". -// -// The general form of a semantic version string accepted by this package is -// -// vMAJOR[.MINOR[.PATCH[-PRERELEASE][+BUILD]]] -// -// where square brackets indicate optional parts of the syntax; -// MAJOR, MINOR, and PATCH are decimal integers without extra leading zeros; -// PRERELEASE and BUILD are each a series of non-empty dot-separated identifiers -// using only alphanumeric characters and hyphens; and -// all-numeric PRERELEASE identifiers must not have leading zeros. -// -// This package follows Semantic Versioning 2.0.0 (see semver.org) -// with two exceptions. First, it requires the "v" prefix. Second, it recognizes -// vMAJOR and vMAJOR.MINOR (with no prerelease or build suffixes) -// as shorthands for vMAJOR.0.0 and vMAJOR.MINOR.0. -package semver - -import "sort" - -// parsed returns the parsed form of a semantic version string. -type parsed struct { - major string - minor string - patch string - short string - prerelease string - build string -} - -// IsValid reports whether v is a valid semantic version string. -func IsValid(v string) bool { - _, ok := parse(v) - return ok -} - -// Canonical returns the canonical formatting of the semantic version v. -// It fills in any missing .MINOR or .PATCH and discards build metadata. -// Two semantic versions compare equal only if their canonical formattings -// are identical strings. -// The canonical invalid semantic version is the empty string. -func Canonical(v string) string { - p, ok := parse(v) - if !ok { - return "" - } - if p.build != "" { - return v[:len(v)-len(p.build)] - } - if p.short != "" { - return v + p.short - } - return v -} - -// Major returns the major version prefix of the semantic version v. -// For example, Major("v2.1.0") == "v2". -// If v is an invalid semantic version string, Major returns the empty string. -func Major(v string) string { - pv, ok := parse(v) - if !ok { - return "" - } - return v[:1+len(pv.major)] -} - -// MajorMinor returns the major.minor version prefix of the semantic version v. -// For example, MajorMinor("v2.1.0") == "v2.1". -// If v is an invalid semantic version string, MajorMinor returns the empty string. -func MajorMinor(v string) string { - pv, ok := parse(v) - if !ok { - return "" - } - i := 1 + len(pv.major) - if j := i + 1 + len(pv.minor); j <= len(v) && v[i] == '.' && v[i+1:j] == pv.minor { - return v[:j] - } - return v[:i] + "." + pv.minor -} - -// Prerelease returns the prerelease suffix of the semantic version v. -// For example, Prerelease("v2.1.0-pre+meta") == "-pre". -// If v is an invalid semantic version string, Prerelease returns the empty string. -func Prerelease(v string) string { - pv, ok := parse(v) - if !ok { - return "" - } - return pv.prerelease -} - -// Build returns the build suffix of the semantic version v. -// For example, Build("v2.1.0+meta") == "+meta". -// If v is an invalid semantic version string, Build returns the empty string. -func Build(v string) string { - pv, ok := parse(v) - if !ok { - return "" - } - return pv.build -} - -// Compare returns an integer comparing two versions according to -// semantic version precedence. -// The result will be 0 if v == w, -1 if v < w, or +1 if v > w. -// -// An invalid semantic version string is considered less than a valid one. -// All invalid semantic version strings compare equal to each other. -func Compare(v, w string) int { - pv, ok1 := parse(v) - pw, ok2 := parse(w) - if !ok1 && !ok2 { - return 0 - } - if !ok1 { - return -1 - } - if !ok2 { - return +1 - } - if c := compareInt(pv.major, pw.major); c != 0 { - return c - } - if c := compareInt(pv.minor, pw.minor); c != 0 { - return c - } - if c := compareInt(pv.patch, pw.patch); c != 0 { - return c - } - return comparePrerelease(pv.prerelease, pw.prerelease) -} - -// Max canonicalizes its arguments and then returns the version string -// that compares greater. -// -// Deprecated: use [Compare] instead. In most cases, returning a canonicalized -// version is not expected or desired. -func Max(v, w string) string { - v = Canonical(v) - w = Canonical(w) - if Compare(v, w) > 0 { - return v - } - return w -} - -// ByVersion implements [sort.Interface] for sorting semantic version strings. -type ByVersion []string - -func (vs ByVersion) Len() int { return len(vs) } -func (vs ByVersion) Swap(i, j int) { vs[i], vs[j] = vs[j], vs[i] } -func (vs ByVersion) Less(i, j int) bool { - cmp := Compare(vs[i], vs[j]) - if cmp != 0 { - return cmp < 0 - } - return vs[i] < vs[j] -} - -// Sort sorts a list of semantic version strings using [ByVersion]. -func Sort(list []string) { - sort.Sort(ByVersion(list)) -} - -func parse(v string) (p parsed, ok bool) { - if v == "" || v[0] != 'v' { - return - } - p.major, v, ok = parseInt(v[1:]) - if !ok { - return - } - if v == "" { - p.minor = "0" - p.patch = "0" - p.short = ".0.0" - return - } - if v[0] != '.' { - ok = false - return - } - p.minor, v, ok = parseInt(v[1:]) - if !ok { - return - } - if v == "" { - p.patch = "0" - p.short = ".0" - return - } - if v[0] != '.' { - ok = false - return - } - p.patch, v, ok = parseInt(v[1:]) - if !ok { - return - } - if len(v) > 0 && v[0] == '-' { - p.prerelease, v, ok = parsePrerelease(v) - if !ok { - return - } - } - if len(v) > 0 && v[0] == '+' { - p.build, v, ok = parseBuild(v) - if !ok { - return - } - } - if v != "" { - ok = false - return - } - ok = true - return -} - -func parseInt(v string) (t, rest string, ok bool) { - if v == "" { - return - } - if v[0] < '0' || '9' < v[0] { - return - } - i := 1 - for i < len(v) && '0' <= v[i] && v[i] <= '9' { - i++ - } - if v[0] == '0' && i != 1 { - return - } - return v[:i], v[i:], true -} - -func parsePrerelease(v string) (t, rest string, ok bool) { - // "A pre-release version MAY be denoted by appending a hyphen and - // a series of dot separated identifiers immediately following the patch version. - // Identifiers MUST comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-]. - // Identifiers MUST NOT be empty. Numeric identifiers MUST NOT include leading zeroes." - if v == "" || v[0] != '-' { - return - } - i := 1 - start := 1 - for i < len(v) && v[i] != '+' { - if !isIdentChar(v[i]) && v[i] != '.' { - return - } - if v[i] == '.' { - if start == i || isBadNum(v[start:i]) { - return - } - start = i + 1 - } - i++ - } - if start == i || isBadNum(v[start:i]) { - return - } - return v[:i], v[i:], true -} - -func parseBuild(v string) (t, rest string, ok bool) { - if v == "" || v[0] != '+' { - return - } - i := 1 - start := 1 - for i < len(v) { - if !isIdentChar(v[i]) && v[i] != '.' { - return - } - if v[i] == '.' { - if start == i { - return - } - start = i + 1 - } - i++ - } - if start == i { - return - } - return v[:i], v[i:], true -} - -func isIdentChar(c byte) bool { - return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' || c == '-' -} - -func isBadNum(v string) bool { - i := 0 - for i < len(v) && '0' <= v[i] && v[i] <= '9' { - i++ - } - return i == len(v) && i > 1 && v[0] == '0' -} - -func isNum(v string) bool { - i := 0 - for i < len(v) && '0' <= v[i] && v[i] <= '9' { - i++ - } - return i == len(v) -} - -func compareInt(x, y string) int { - if x == y { - return 0 - } - if len(x) < len(y) { - return -1 - } - if len(x) > len(y) { - return +1 - } - if x < y { - return -1 - } else { - return +1 - } -} - -func comparePrerelease(x, y string) int { - // "When major, minor, and patch are equal, a pre-release version has - // lower precedence than a normal version. - // Example: 1.0.0-alpha < 1.0.0. - // Precedence for two pre-release versions with the same major, minor, - // and patch version MUST be determined by comparing each dot separated - // identifier from left to right until a difference is found as follows: - // identifiers consisting of only digits are compared numerically and - // identifiers with letters or hyphens are compared lexically in ASCII - // sort order. Numeric identifiers always have lower precedence than - // non-numeric identifiers. A larger set of pre-release fields has a - // higher precedence than a smaller set, if all of the preceding - // identifiers are equal. - // Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < - // 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0." - if x == y { - return 0 - } - if x == "" { - return +1 - } - if y == "" { - return -1 - } - for x != "" && y != "" { - x = x[1:] // skip - or . - y = y[1:] // skip - or . - var dx, dy string - dx, x = nextIdent(x) - dy, y = nextIdent(y) - if dx != dy { - ix := isNum(dx) - iy := isNum(dy) - if ix != iy { - if ix { - return -1 - } else { - return +1 - } - } - if ix { - if len(dx) < len(dy) { - return -1 - } - if len(dx) > len(dy) { - return +1 - } - } - if dx < dy { - return -1 - } else { - return +1 - } - } - } - if x == "" { - return -1 - } else { - return +1 - } -} - -func nextIdent(x string) (dx, rest string) { - i := 0 - for i < len(x) && x[i] != '.' { - i++ - } - return x[:i], x[i:] -} diff --git a/go/extractor/vendor/golang.org/x/tools/LICENSE b/go/extractor/vendor/golang.org/x/tools/LICENSE deleted file mode 100644 index 6a66aea5eafe..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/go/extractor/vendor/golang.org/x/tools/PATENTS b/go/extractor/vendor/golang.org/x/tools/PATENTS deleted file mode 100644 index 733099041f84..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/BUILD.bazel deleted file mode 100644 index 5d68c2fe989e..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/BUILD.bazel +++ /dev/null @@ -1,15 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "gcexportdata", - srcs = [ - "gcexportdata.go", - "importer.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/go/gcexportdata", - importpath = "golang.org/x/tools/go/gcexportdata", - visibility = ["//visibility:public"], - deps = ["//go/extractor/vendor/golang.org/x/tools/internal/gcimporter"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go deleted file mode 100644 index 03543bd4bb8f..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package gcexportdata provides functions for locating, reading, and -// writing export data files containing type information produced by the -// gc compiler. This package supports go1.7 export data format and all -// later versions. -// -// Although it might seem convenient for this package to live alongside -// go/types in the standard library, this would cause version skew -// problems for developer tools that use it, since they must be able to -// consume the outputs of the gc compiler both before and after a Go -// update such as from Go 1.7 to Go 1.8. Because this package lives in -// golang.org/x/tools, sites can update their version of this repo some -// time before the Go 1.8 release and rebuild and redeploy their -// developer tools, which will then be able to consume both Go 1.7 and -// Go 1.8 export data files, so they will work before and after the -// Go update. (See discussion at https://golang.org/issue/15651.) -package gcexportdata // import "golang.org/x/tools/go/gcexportdata" - -import ( - "bufio" - "bytes" - "encoding/json" - "fmt" - "go/token" - "go/types" - "io" - "os/exec" - - "golang.org/x/tools/internal/gcimporter" -) - -// Find returns the name of an object (.o) or archive (.a) file -// containing type information for the specified import path, -// using the go command. -// If no file was found, an empty filename is returned. -// -// A relative srcDir is interpreted relative to the current working directory. -// -// Find also returns the package's resolved (canonical) import path, -// reflecting the effects of srcDir and vendoring on importPath. -// -// Deprecated: Use the higher-level API in golang.org/x/tools/go/packages, -// which is more efficient. -func Find(importPath, srcDir string) (filename, path string) { - cmd := exec.Command("go", "list", "-json", "-export", "--", importPath) - cmd.Dir = srcDir - out, err := cmd.CombinedOutput() - if err != nil { - return "", "" - } - var data struct { - ImportPath string - Export string - } - json.Unmarshal(out, &data) - return data.Export, data.ImportPath -} - -// NewReader returns a reader for the export data section of an object -// (.o) or archive (.a) file read from r. The new reader may provide -// additional trailing data beyond the end of the export data. -func NewReader(r io.Reader) (io.Reader, error) { - buf := bufio.NewReader(r) - _, size, err := gcimporter.FindExportData(buf) - if err != nil { - return nil, err - } - - if size >= 0 { - // We were given an archive and found the __.PKGDEF in it. - // This tells us the size of the export data, and we don't - // need to return the entire file. - return &io.LimitedReader{ - R: buf, - N: size, - }, nil - } else { - // We were given an object file. As such, we don't know how large - // the export data is and must return the entire file. - return buf, nil - } -} - -// readAll works the same way as io.ReadAll, but avoids allocations and copies -// by preallocating a byte slice of the necessary size if the size is known up -// front. This is always possible when the input is an archive. In that case, -// NewReader will return the known size using an io.LimitedReader. -func readAll(r io.Reader) ([]byte, error) { - if lr, ok := r.(*io.LimitedReader); ok { - data := make([]byte, lr.N) - _, err := io.ReadFull(lr, data) - return data, err - } - return io.ReadAll(r) -} - -// Read reads export data from in, decodes it, and returns type -// information for the package. -// -// The package path (effectively its linker symbol prefix) is -// specified by path, since unlike the package name, this information -// may not be recorded in the export data. -// -// File position information is added to fset. -// -// Read may inspect and add to the imports map to ensure that references -// within the export data to other packages are consistent. The caller -// must ensure that imports[path] does not exist, or exists but is -// incomplete (see types.Package.Complete), and Read inserts the -// resulting package into this map entry. -// -// On return, the state of the reader is undefined. -func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, path string) (*types.Package, error) { - data, err := readAll(in) - if err != nil { - return nil, fmt.Errorf("reading export data for %q: %v", path, err) - } - - if bytes.HasPrefix(data, []byte("!")) { - return nil, fmt.Errorf("can't read export data for %q directly from an archive file (call gcexportdata.NewReader first to extract export data)", path) - } - - // The indexed export format starts with an 'i'; the older - // binary export format starts with a 'c', 'd', or 'v' - // (from "version"). Select appropriate importer. - if len(data) > 0 { - switch data[0] { - case 'v', 'c', 'd': // binary, till go1.10 - return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) - - case 'i': // indexed, till go1.19 - _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) - return pkg, err - - case 'u': // unified, from go1.20 - _, pkg, err := gcimporter.UImportData(fset, imports, data[1:], path) - return pkg, err - - default: - l := len(data) - if l > 10 { - l = 10 - } - return nil, fmt.Errorf("unexpected export data with prefix %q for path %s", string(data[:l]), path) - } - } - return nil, fmt.Errorf("empty export data for %s", path) -} - -// Write writes encoded type information for the specified package to out. -// The FileSet provides file position information for named objects. -func Write(out io.Writer, fset *token.FileSet, pkg *types.Package) error { - if _, err := io.WriteString(out, "i"); err != nil { - return err - } - return gcimporter.IExportData(out, fset, pkg) -} - -// ReadBundle reads an export bundle from in, decodes it, and returns type -// information for the packages. -// File position information is added to fset. -// -// ReadBundle may inspect and add to the imports map to ensure that references -// within the export bundle to other packages are consistent. -// -// On return, the state of the reader is undefined. -// -// Experimental: This API is experimental and may change in the future. -func ReadBundle(in io.Reader, fset *token.FileSet, imports map[string]*types.Package) ([]*types.Package, error) { - data, err := readAll(in) - if err != nil { - return nil, fmt.Errorf("reading export bundle: %v", err) - } - return gcimporter.IImportBundle(fset, imports, data) -} - -// WriteBundle writes encoded type information for the specified packages to out. -// The FileSet provides file position information for named objects. -// -// Experimental: This API is experimental and may change in the future. -func WriteBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error { - return gcimporter.IExportBundle(out, fset, pkgs) -} diff --git a/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/importer.go b/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/importer.go deleted file mode 100644 index 37a7247e2686..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/gcexportdata/importer.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package gcexportdata - -import ( - "fmt" - "go/token" - "go/types" - "os" -) - -// NewImporter returns a new instance of the types.Importer interface -// that reads type information from export data files written by gc. -// The Importer also satisfies types.ImporterFrom. -// -// Export data files are located using "go build" workspace conventions -// and the build.Default context. -// -// Use this importer instead of go/importer.For("gc", ...) to avoid the -// version-skew problems described in the documentation of this package, -// or to control the FileSet or access the imports map populated during -// package loading. -// -// Deprecated: Use the higher-level API in golang.org/x/tools/go/packages, -// which is more efficient. -func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom { - return importer{fset, imports} -} - -type importer struct { - fset *token.FileSet - imports map[string]*types.Package -} - -func (imp importer) Import(importPath string) (*types.Package, error) { - return imp.ImportFrom(importPath, "", 0) -} - -func (imp importer) ImportFrom(importPath, srcDir string, mode types.ImportMode) (_ *types.Package, err error) { - filename, path := Find(importPath, srcDir) - if filename == "" { - if importPath == "unsafe" { - // Even for unsafe, call Find first in case - // the package was vendored. - return types.Unsafe, nil - } - return nil, fmt.Errorf("can't find import: %s", importPath) - } - - if pkg, ok := imp.imports[path]; ok && pkg.Complete() { - return pkg, nil // cache hit - } - - // open file - f, err := os.Open(filename) - if err != nil { - return nil, err - } - defer func() { - f.Close() - if err != nil { - // add file name to error - err = fmt.Errorf("reading export data: %s: %v", filename, err) - } - }() - - r, err := NewReader(f) - if err != nil { - return nil, err - } - - return Read(r, imp.fset, imp.imports, path) -} diff --git a/go/extractor/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD.bazel deleted file mode 100644 index 2ef27e2c88af..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "packagesdriver", - srcs = ["sizes.go"], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/go/internal/packagesdriver", - importpath = "golang.org/x/tools/go/internal/packagesdriver", - visibility = ["//go/extractor/vendor/golang.org/x/tools/go:__subpackages__"], - deps = ["//go/extractor/vendor/golang.org/x/tools/internal/gocommand"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go b/go/extractor/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go deleted file mode 100644 index 333676b7cfcc..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package packagesdriver fetches type sizes for go/packages and go/analysis. -package packagesdriver - -import ( - "context" - "fmt" - "strings" - - "golang.org/x/tools/internal/gocommand" -) - -func GetSizesForArgsGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) { - inv.Verb = "list" - inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"} - stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv) - var goarch, compiler string - if rawErr != nil { - rawErrMsg := rawErr.Error() - if strings.Contains(rawErrMsg, "cannot find main module") || - strings.Contains(rawErrMsg, "go.mod file not found") { - // User's running outside of a module. - // All bets are off. Get GOARCH and guess compiler is gc. - // TODO(matloob): Is this a problem in practice? - inv.Verb = "env" - inv.Args = []string{"GOARCH"} - envout, enverr := gocmdRunner.Run(ctx, inv) - if enverr != nil { - return "", "", enverr - } - goarch = strings.TrimSpace(envout.String()) - compiler = "gc" - } else if friendlyErr != nil { - return "", "", friendlyErr - } else { - // This should be unreachable, but be defensive - // in case RunRaw's error results are inconsistent. - return "", "", rawErr - } - } else { - fields := strings.Fields(stdout.String()) - if len(fields) < 2 { - return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", - stdout.String(), stderr.String()) - } - goarch = fields[0] - compiler = fields[1] - } - return compiler, goarch, nil -} diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/go/packages/BUILD.bazel deleted file mode 100644 index 03d3e3b01585..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/BUILD.bazel +++ /dev/null @@ -1,27 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "packages", - srcs = [ - "doc.go", - "external.go", - "golist.go", - "golist_overlay.go", - "loadmode_string.go", - "packages.go", - "visit.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/go/packages", - importpath = "golang.org/x/tools/go/packages", - visibility = ["//visibility:public"], - deps = [ - "//go/extractor/vendor/golang.org/x/tools/go/gcexportdata", - "//go/extractor/vendor/golang.org/x/tools/go/internal/packagesdriver", - "//go/extractor/vendor/golang.org/x/tools/internal/gocommand", - "//go/extractor/vendor/golang.org/x/tools/internal/packagesinternal", - "//go/extractor/vendor/golang.org/x/tools/internal/typesinternal", - "//go/extractor/vendor/golang.org/x/tools/internal/versions", - ], -) diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/doc.go b/go/extractor/vendor/golang.org/x/tools/go/packages/doc.go deleted file mode 100644 index a8d7b06ac090..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/doc.go +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -/* -Package packages loads Go packages for inspection and analysis. - -The [Load] function takes as input a list of patterns and returns a -list of [Package] values describing individual packages matched by those -patterns. -A [Config] specifies configuration options, the most important of which is -the [LoadMode], which controls the amount of detail in the loaded packages. - -Load passes most patterns directly to the underlying build tool. -The default build tool is the go command. -Its supported patterns are described at -https://pkg.go.dev/cmd/go#hdr-Package_lists_and_patterns. -Other build systems may be supported by providing a "driver"; -see [The driver protocol]. - -All patterns with the prefix "query=", where query is a -non-empty string of letters from [a-z], are reserved and may be -interpreted as query operators. - -Two query operators are currently supported: "file" and "pattern". - -The query "file=path/to/file.go" matches the package or packages enclosing -the Go source file path/to/file.go. For example "file=~/go/src/fmt/print.go" -might return the packages "fmt" and "fmt [fmt.test]". - -The query "pattern=string" causes "string" to be passed directly to -the underlying build tool. In most cases this is unnecessary, -but an application can use Load("pattern=" + x) as an escaping mechanism -to ensure that x is not interpreted as a query operator if it contains '='. - -All other query operators are reserved for future use and currently -cause Load to report an error. - -The Package struct provides basic information about the package, including - - - ID, a unique identifier for the package in the returned set; - - GoFiles, the names of the package's Go source files; - - Imports, a map from source import strings to the Packages they name; - - Types, the type information for the package's exported symbols; - - Syntax, the parsed syntax trees for the package's source code; and - - TypesInfo, the result of a complete type-check of the package syntax trees. - -(See the documentation for type Package for the complete list of fields -and more detailed descriptions.) - -For example, - - Load(nil, "bytes", "unicode...") - -returns four Package structs describing the standard library packages -bytes, unicode, unicode/utf16, and unicode/utf8. Note that one pattern -can match multiple packages and that a package might be matched by -multiple patterns: in general it is not possible to determine which -packages correspond to which patterns. - -Note that the list returned by Load contains only the packages matched -by the patterns. Their dependencies can be found by walking the import -graph using the Imports fields. - -The Load function can be configured by passing a pointer to a Config as -the first argument. A nil Config is equivalent to the zero Config, which -causes Load to run in LoadFiles mode, collecting minimal information. -See the documentation for type Config for details. - -As noted earlier, the Config.Mode controls the amount of detail -reported about the loaded packages. See the documentation for type LoadMode -for details. - -Most tools should pass their command-line arguments (after any flags) -uninterpreted to [Load], so that it can interpret them -according to the conventions of the underlying build system. - -See the Example function for typical usage. - -# The driver protocol - -[Load] may be used to load Go packages even in Go projects that use -alternative build systems, by installing an appropriate "driver" -program for the build system and specifying its location in the -GOPACKAGESDRIVER environment variable. -For example, -https://github.com/bazelbuild/rules_go/wiki/Editor-and-tool-integration -explains how to use the driver for Bazel. - -The driver program is responsible for interpreting patterns in its -preferred notation and reporting information about the packages that -those patterns identify. Drivers must also support the special "file=" -and "pattern=" patterns described above. - -The patterns are provided as positional command-line arguments. A -JSON-encoded [DriverRequest] message providing additional information -is written to the driver's standard input. The driver must write a -JSON-encoded [DriverResponse] message to its standard output. (This -message differs from the JSON schema produced by 'go list'.) -*/ -package packages // import "golang.org/x/tools/go/packages" - -/* - -Motivation and design considerations - -The new package's design solves problems addressed by two existing -packages: go/build, which locates and describes packages, and -golang.org/x/tools/go/loader, which loads, parses and type-checks them. -The go/build.Package structure encodes too much of the 'go build' way -of organizing projects, leaving us in need of a data type that describes a -package of Go source code independent of the underlying build system. -We wanted something that works equally well with go build and vgo, and -also other build systems such as Bazel and Blaze, making it possible to -construct analysis tools that work in all these environments. -Tools such as errcheck and staticcheck were essentially unavailable to -the Go community at Google, and some of Google's internal tools for Go -are unavailable externally. -This new package provides a uniform way to obtain package metadata by -querying each of these build systems, optionally supporting their -preferred command-line notations for packages, so that tools integrate -neatly with users' build environments. The Metadata query function -executes an external query tool appropriate to the current workspace. - -Loading packages always returns the complete import graph "all the way down", -even if all you want is information about a single package, because the query -mechanisms of all the build systems we currently support ({go,vgo} list, and -blaze/bazel aspect-based query) cannot provide detailed information -about one package without visiting all its dependencies too, so there is -no additional asymptotic cost to providing transitive information. -(This property might not be true of a hypothetical 5th build system.) - -In calls to TypeCheck, all initial packages, and any package that -transitively depends on one of them, must be loaded from source. -Consider A->B->C->D->E: if A,C are initial, A,B,C must be loaded from -source; D may be loaded from export data, and E may not be loaded at all -(though it's possible that D's export data mentions it, so a -types.Package may be created for it and exposed.) - -The old loader had a feature to suppress type-checking of function -bodies on a per-package basis, primarily intended to reduce the work of -obtaining type information for imported packages. Now that imports are -satisfied by export data, the optimization no longer seems necessary. - -Despite some early attempts, the old loader did not exploit export data, -instead always using the equivalent of WholeProgram mode. This was due -to the complexity of mixing source and export data packages (now -resolved by the upward traversal mentioned above), and because export data -files were nearly always missing or stale. Now that 'go build' supports -caching, all the underlying build systems can guarantee to produce -export data in a reasonable (amortized) time. - -Test "main" packages synthesized by the build system are now reported as -first-class packages, avoiding the need for clients (such as go/ssa) to -reinvent this generation logic. - -One way in which go/packages is simpler than the old loader is in its -treatment of in-package tests. In-package tests are packages that -consist of all the files of the library under test, plus the test files. -The old loader constructed in-package tests by a two-phase process of -mutation called "augmentation": first it would construct and type check -all the ordinary library packages and type-check the packages that -depend on them; then it would add more (test) files to the package and -type-check again. This two-phase approach had four major problems: -1) in processing the tests, the loader modified the library package, - leaving no way for a client application to see both the test - package and the library package; one would mutate into the other. -2) because test files can declare additional methods on types defined in - the library portion of the package, the dispatch of method calls in - the library portion was affected by the presence of the test files. - This should have been a clue that the packages were logically - different. -3) this model of "augmentation" assumed at most one in-package test - per library package, which is true of projects using 'go build', - but not other build systems. -4) because of the two-phase nature of test processing, all packages that - import the library package had to be processed before augmentation, - forcing a "one-shot" API and preventing the client from calling Load - in several times in sequence as is now possible in WholeProgram mode. - (TypeCheck mode has a similar one-shot restriction for a different reason.) - -Early drafts of this package supported "multi-shot" operation. -Although it allowed clients to make a sequence of calls (or concurrent -calls) to Load, building up the graph of Packages incrementally, -it was of marginal value: it complicated the API -(since it allowed some options to vary across calls but not others), -it complicated the implementation, -it cannot be made to work in Types mode, as explained above, -and it was less efficient than making one combined call (when this is possible). -Among the clients we have inspected, none made multiple calls to load -but could not be easily and satisfactorily modified to make only a single call. -However, applications changes may be required. -For example, the ssadump command loads the user-specified packages -and in addition the runtime package. It is tempting to simply append -"runtime" to the user-provided list, but that does not work if the user -specified an ad-hoc package such as [a.go b.go]. -Instead, ssadump no longer requests the runtime package, -but seeks it among the dependencies of the user-specified packages, -and emits an error if it is not found. - -Overlays: The Overlay field in the Config allows providing alternate contents -for Go source files, by providing a mapping from file path to contents. -go/packages will pull in new imports added in overlay files when go/packages -is run in LoadImports mode or greater. -Overlay support for the go list driver isn't complete yet: if the file doesn't -exist on disk, it will only be recognized in an overlay if it is a non-test file -and the package would be reported even without the overlay. - -Questions & Tasks - -- Add GOARCH/GOOS? - They are not portable concepts, but could be made portable. - Our goal has been to allow users to express themselves using the conventions - of the underlying build system: if the build system honors GOARCH - during a build and during a metadata query, then so should - applications built atop that query mechanism. - Conversely, if the target architecture of the build is determined by - command-line flags, the application can pass the relevant - flags through to the build system using a command such as: - myapp -query_flag="--cpu=amd64" -query_flag="--os=darwin" - However, this approach is low-level, unwieldy, and non-portable. - GOOS and GOARCH seem important enough to warrant a dedicated option. - -- How should we handle partial failures such as a mixture of good and - malformed patterns, existing and non-existent packages, successful and - failed builds, import failures, import cycles, and so on, in a call to - Load? - -- Support bazel, blaze, and go1.10 list, not just go1.11 list. - -- Handle (and test) various partial success cases, e.g. - a mixture of good packages and: - invalid patterns - nonexistent packages - empty packages - packages with malformed package or import declarations - unreadable files - import cycles - other parse errors - type errors - Make sure we record errors at the correct place in the graph. - -- Missing packages among initial arguments are not reported. - Return bogus packages for them, like golist does. - -- "undeclared name" errors (for example) are reported out of source file - order. I suspect this is due to the breadth-first resolution now used - by go/types. Is that a bug? Discuss with gri. - -*/ diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/external.go b/go/extractor/vendor/golang.org/x/tools/go/packages/external.go deleted file mode 100644 index 4335c1eb14c7..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/external.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -// This file defines the protocol that enables an external "driver" -// tool to supply package metadata in place of 'go list'. - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - "os/exec" - "strings" -) - -// DriverRequest defines the schema of a request for package metadata -// from an external driver program. The JSON-encoded DriverRequest -// message is provided to the driver program's standard input. The -// query patterns are provided as command-line arguments. -// -// See the package documentation for an overview. -type DriverRequest struct { - Mode LoadMode `json:"mode"` - - // Env specifies the environment the underlying build system should be run in. - Env []string `json:"env"` - - // BuildFlags are flags that should be passed to the underlying build system. - BuildFlags []string `json:"build_flags"` - - // Tests specifies whether the patterns should also return test packages. - Tests bool `json:"tests"` - - // Overlay maps file paths (relative to the driver's working directory) to the byte contents - // of overlay files. - Overlay map[string][]byte `json:"overlay"` -} - -// DriverResponse defines the schema of a response from an external -// driver program, providing the results of a query for package -// metadata. The driver program must write a JSON-encoded -// DriverResponse message to its standard output. -// -// See the package documentation for an overview. -type DriverResponse struct { - // NotHandled is returned if the request can't be handled by the current - // driver. If an external driver returns a response with NotHandled, the - // rest of the DriverResponse is ignored, and go/packages will fallback - // to the next driver. If go/packages is extended in the future to support - // lists of multiple drivers, go/packages will fall back to the next driver. - NotHandled bool - - // Compiler and Arch are the arguments pass of types.SizesFor - // to get a types.Sizes to use when type checking. - Compiler string - Arch string - - // Roots is the set of package IDs that make up the root packages. - // We have to encode this separately because when we encode a single package - // we cannot know if it is one of the roots as that requires knowledge of the - // graph it is part of. - Roots []string `json:",omitempty"` - - // Packages is the full set of packages in the graph. - // The packages are not connected into a graph. - // The Imports if populated will be stubs that only have their ID set. - // Imports will be connected and then type and syntax information added in a - // later pass (see refine). - Packages []*Package - - // GoVersion is the minor version number used by the driver - // (e.g. the go command on the PATH) when selecting .go files. - // Zero means unknown. - GoVersion int -} - -// driver is the type for functions that query the build system for the -// packages named by the patterns. -type driver func(cfg *Config, patterns ...string) (*DriverResponse, error) - -// findExternalDriver returns the file path of a tool that supplies -// the build system package structure, or "" if not found." -// If GOPACKAGESDRIVER is set in the environment findExternalTool returns its -// value, otherwise it searches for a binary named gopackagesdriver on the PATH. -func findExternalDriver(cfg *Config) driver { - const toolPrefix = "GOPACKAGESDRIVER=" - tool := "" - for _, env := range cfg.Env { - if val := strings.TrimPrefix(env, toolPrefix); val != env { - tool = val - } - } - if tool != "" && tool == "off" { - return nil - } - if tool == "" { - var err error - tool, err = exec.LookPath("gopackagesdriver") - if err != nil { - return nil - } - } - return func(cfg *Config, words ...string) (*DriverResponse, error) { - req, err := json.Marshal(DriverRequest{ - Mode: cfg.Mode, - Env: cfg.Env, - BuildFlags: cfg.BuildFlags, - Tests: cfg.Tests, - Overlay: cfg.Overlay, - }) - if err != nil { - return nil, fmt.Errorf("failed to encode message to driver tool: %v", err) - } - - buf := new(bytes.Buffer) - stderr := new(bytes.Buffer) - cmd := exec.CommandContext(cfg.Context, tool, words...) - cmd.Dir = cfg.Dir - cmd.Env = cfg.Env - cmd.Stdin = bytes.NewReader(req) - cmd.Stdout = buf - cmd.Stderr = stderr - - if err := cmd.Run(); err != nil { - return nil, fmt.Errorf("%v: %v: %s", tool, err, cmd.Stderr) - } - if len(stderr.Bytes()) != 0 && os.Getenv("GOPACKAGESPRINTDRIVERERRORS") != "" { - fmt.Fprintf(os.Stderr, "%s stderr: <<%s>>\n", cmdDebugStr(cmd), stderr) - } - - var response DriverResponse - if err := json.Unmarshal(buf.Bytes(), &response); err != nil { - return nil, err - } - return &response, nil - } -} diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go b/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go deleted file mode 100644 index 22305d9c90a1..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go +++ /dev/null @@ -1,1106 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "log" - "os" - "os/exec" - "path" - "path/filepath" - "reflect" - "sort" - "strconv" - "strings" - "sync" - "unicode" - - "golang.org/x/tools/go/internal/packagesdriver" - "golang.org/x/tools/internal/gocommand" - "golang.org/x/tools/internal/packagesinternal" -) - -// debug controls verbose logging. -var debug, _ = strconv.ParseBool(os.Getenv("GOPACKAGESDEBUG")) - -// A goTooOldError reports that the go command -// found by exec.LookPath is too old to use the new go list behavior. -type goTooOldError struct { - error -} - -// responseDeduper wraps a DriverResponse, deduplicating its contents. -type responseDeduper struct { - seenRoots map[string]bool - seenPackages map[string]*Package - dr *DriverResponse -} - -func newDeduper() *responseDeduper { - return &responseDeduper{ - dr: &DriverResponse{}, - seenRoots: map[string]bool{}, - seenPackages: map[string]*Package{}, - } -} - -// addAll fills in r with a DriverResponse. -func (r *responseDeduper) addAll(dr *DriverResponse) { - for _, pkg := range dr.Packages { - r.addPackage(pkg) - } - for _, root := range dr.Roots { - r.addRoot(root) - } - r.dr.GoVersion = dr.GoVersion -} - -func (r *responseDeduper) addPackage(p *Package) { - if r.seenPackages[p.ID] != nil { - return - } - r.seenPackages[p.ID] = p - r.dr.Packages = append(r.dr.Packages, p) -} - -func (r *responseDeduper) addRoot(id string) { - if r.seenRoots[id] { - return - } - r.seenRoots[id] = true - r.dr.Roots = append(r.dr.Roots, id) -} - -type golistState struct { - cfg *Config - ctx context.Context - - envOnce sync.Once - goEnvError error - goEnv map[string]string - - rootsOnce sync.Once - rootDirsError error - rootDirs map[string]string - - goVersionOnce sync.Once - goVersionError error - goVersion int // The X in Go 1.X. - - // vendorDirs caches the (non)existence of vendor directories. - vendorDirs map[string]bool -} - -// getEnv returns Go environment variables. Only specific variables are -// populated -- computing all of them is slow. -func (state *golistState) getEnv() (map[string]string, error) { - state.envOnce.Do(func() { - var b *bytes.Buffer - b, state.goEnvError = state.invokeGo("env", "-json", "GOMOD", "GOPATH") - if state.goEnvError != nil { - return - } - - state.goEnv = make(map[string]string) - decoder := json.NewDecoder(b) - if state.goEnvError = decoder.Decode(&state.goEnv); state.goEnvError != nil { - return - } - }) - return state.goEnv, state.goEnvError -} - -// mustGetEnv is a convenience function that can be used if getEnv has already succeeded. -func (state *golistState) mustGetEnv() map[string]string { - env, err := state.getEnv() - if err != nil { - panic(fmt.Sprintf("mustGetEnv: %v", err)) - } - return env -} - -// goListDriver uses the go list command to interpret the patterns and produce -// the build system package structure. -// See driver for more details. -func goListDriver(cfg *Config, patterns ...string) (_ *DriverResponse, err error) { - // Make sure that any asynchronous go commands are killed when we return. - parentCtx := cfg.Context - if parentCtx == nil { - parentCtx = context.Background() - } - ctx, cancel := context.WithCancel(parentCtx) - defer cancel() - - response := newDeduper() - - state := &golistState{ - cfg: cfg, - ctx: ctx, - vendorDirs: map[string]bool{}, - } - - // Fill in response.Sizes asynchronously if necessary. - if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { - errCh := make(chan error) - go func() { - compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) - response.dr.Compiler = compiler - response.dr.Arch = arch - errCh <- err - }() - defer func() { - if sizesErr := <-errCh; sizesErr != nil { - err = sizesErr - } - }() - } - - // Determine files requested in contains patterns - var containFiles []string - restPatterns := make([]string, 0, len(patterns)) - // Extract file= and other [querytype]= patterns. Report an error if querytype - // doesn't exist. -extractQueries: - for _, pattern := range patterns { - eqidx := strings.Index(pattern, "=") - if eqidx < 0 { - restPatterns = append(restPatterns, pattern) - } else { - query, value := pattern[:eqidx], pattern[eqidx+len("="):] - switch query { - case "file": - containFiles = append(containFiles, value) - case "pattern": - restPatterns = append(restPatterns, value) - case "": // not a reserved query - restPatterns = append(restPatterns, pattern) - default: - for _, rune := range query { - if rune < 'a' || rune > 'z' { // not a reserved query - restPatterns = append(restPatterns, pattern) - continue extractQueries - } - } - // Reject all other patterns containing "=" - return nil, fmt.Errorf("invalid query type %q in query pattern %q", query, pattern) - } - } - } - - // See if we have any patterns to pass through to go list. Zero initial - // patterns also requires a go list call, since it's the equivalent of - // ".". - if len(restPatterns) > 0 || len(patterns) == 0 { - dr, err := state.createDriverResponse(restPatterns...) - if err != nil { - return nil, err - } - response.addAll(dr) - } - - if len(containFiles) != 0 { - if err := state.runContainsQueries(response, containFiles); err != nil { - return nil, err - } - } - - // (We may yet return an error due to defer.) - return response.dr, nil -} - -func (state *golistState) runContainsQueries(response *responseDeduper, queries []string) error { - for _, query := range queries { - // TODO(matloob): Do only one query per directory. - fdir := filepath.Dir(query) - // Pass absolute path of directory to go list so that it knows to treat it as a directory, - // not a package path. - pattern, err := filepath.Abs(fdir) - if err != nil { - return fmt.Errorf("could not determine absolute path of file= query path %q: %v", query, err) - } - dirResponse, err := state.createDriverResponse(pattern) - - // If there was an error loading the package, or no packages are returned, - // or the package is returned with errors, try to load the file as an - // ad-hoc package. - // Usually the error will appear in a returned package, but may not if we're - // in module mode and the ad-hoc is located outside a module. - if err != nil || len(dirResponse.Packages) == 0 || len(dirResponse.Packages) == 1 && len(dirResponse.Packages[0].GoFiles) == 0 && - len(dirResponse.Packages[0].Errors) == 1 { - var queryErr error - if dirResponse, queryErr = state.adhocPackage(pattern, query); queryErr != nil { - return err // return the original error - } - } - isRoot := make(map[string]bool, len(dirResponse.Roots)) - for _, root := range dirResponse.Roots { - isRoot[root] = true - } - for _, pkg := range dirResponse.Packages { - // Add any new packages to the main set - // We don't bother to filter packages that will be dropped by the changes of roots, - // that will happen anyway during graph construction outside this function. - // Over-reporting packages is not a problem. - response.addPackage(pkg) - // if the package was not a root one, it cannot have the file - if !isRoot[pkg.ID] { - continue - } - for _, pkgFile := range pkg.GoFiles { - if filepath.Base(query) == filepath.Base(pkgFile) { - response.addRoot(pkg.ID) - break - } - } - } - } - return nil -} - -// adhocPackage attempts to load or construct an ad-hoc package for a given -// query, if the original call to the driver produced inadequate results. -func (state *golistState) adhocPackage(pattern, query string) (*DriverResponse, error) { - response, err := state.createDriverResponse(query) - if err != nil { - return nil, err - } - // If we get nothing back from `go list`, - // try to make this file into its own ad-hoc package. - // TODO(rstambler): Should this check against the original response? - if len(response.Packages) == 0 { - response.Packages = append(response.Packages, &Package{ - ID: "command-line-arguments", - PkgPath: query, - GoFiles: []string{query}, - CompiledGoFiles: []string{query}, - Imports: make(map[string]*Package), - }) - response.Roots = append(response.Roots, "command-line-arguments") - } - // Handle special cases. - if len(response.Packages) == 1 { - // golang/go#33482: If this is a file= query for ad-hoc packages where - // the file only exists on an overlay, and exists outside of a module, - // add the file to the package and remove the errors. - if response.Packages[0].ID == "command-line-arguments" || - filepath.ToSlash(response.Packages[0].PkgPath) == filepath.ToSlash(query) { - if len(response.Packages[0].GoFiles) == 0 { - filename := filepath.Join(pattern, filepath.Base(query)) // avoid recomputing abspath - // TODO(matloob): check if the file is outside of a root dir? - for path := range state.cfg.Overlay { - if path == filename { - response.Packages[0].Errors = nil - response.Packages[0].GoFiles = []string{path} - response.Packages[0].CompiledGoFiles = []string{path} - } - } - } - } - } - return response, nil -} - -// Fields must match go list; -// see $GOROOT/src/cmd/go/internal/load/pkg.go. -type jsonPackage struct { - ImportPath string - Dir string - Name string - Export string - GoFiles []string - CompiledGoFiles []string - IgnoredGoFiles []string - IgnoredOtherFiles []string - EmbedPatterns []string - EmbedFiles []string - CFiles []string - CgoFiles []string - CXXFiles []string - MFiles []string - HFiles []string - FFiles []string - SFiles []string - SwigFiles []string - SwigCXXFiles []string - SysoFiles []string - Imports []string - ImportMap map[string]string - Deps []string - Module *Module - TestGoFiles []string - TestImports []string - XTestGoFiles []string - XTestImports []string - ForTest string // q in a "p [q.test]" package, else "" - DepOnly bool - - Error *packagesinternal.PackageError - DepsErrors []*packagesinternal.PackageError -} - -type jsonPackageError struct { - ImportStack []string - Pos string - Err string -} - -func otherFiles(p *jsonPackage) [][]string { - return [][]string{p.CFiles, p.CXXFiles, p.MFiles, p.HFiles, p.FFiles, p.SFiles, p.SwigFiles, p.SwigCXXFiles, p.SysoFiles} -} - -// createDriverResponse uses the "go list" command to expand the pattern -// words and return a response for the specified packages. -func (state *golistState) createDriverResponse(words ...string) (*DriverResponse, error) { - // go list uses the following identifiers in ImportPath and Imports: - // - // "p" -- importable package or main (command) - // "q.test" -- q's test executable - // "p [q.test]" -- variant of p as built for q's test executable - // "q_test [q.test]" -- q's external test package - // - // The packages p that are built differently for a test q.test - // are q itself, plus any helpers used by the external test q_test, - // typically including "testing" and all its dependencies. - - // Run "go list" for complete - // information on the specified packages. - goVersion, err := state.getGoVersion() - if err != nil { - return nil, err - } - buf, err := state.invokeGo("list", golistargs(state.cfg, words, goVersion)...) - if err != nil { - return nil, err - } - - seen := make(map[string]*jsonPackage) - pkgs := make(map[string]*Package) - additionalErrors := make(map[string][]Error) - // Decode the JSON and convert it to Package form. - response := &DriverResponse{ - GoVersion: goVersion, - } - for dec := json.NewDecoder(buf); dec.More(); { - p := new(jsonPackage) - if err := dec.Decode(p); err != nil { - return nil, fmt.Errorf("JSON decoding failed: %v", err) - } - - if p.ImportPath == "" { - // The documentation for go list says that “[e]rroneous packages will have - // a non-empty ImportPath”. If for some reason it comes back empty, we - // prefer to error out rather than silently discarding data or handing - // back a package without any way to refer to it. - if p.Error != nil { - return nil, Error{ - Pos: p.Error.Pos, - Msg: p.Error.Err, - } - } - return nil, fmt.Errorf("package missing import path: %+v", p) - } - - // Work around https://golang.org/issue/33157: - // go list -e, when given an absolute path, will find the package contained at - // that directory. But when no package exists there, it will return a fake package - // with an error and the ImportPath set to the absolute path provided to go list. - // Try to convert that absolute path to what its package path would be if it's - // contained in a known module or GOPATH entry. This will allow the package to be - // properly "reclaimed" when overlays are processed. - if filepath.IsAbs(p.ImportPath) && p.Error != nil { - pkgPath, ok, err := state.getPkgPath(p.ImportPath) - if err != nil { - return nil, err - } - if ok { - p.ImportPath = pkgPath - } - } - - if old, found := seen[p.ImportPath]; found { - // If one version of the package has an error, and the other doesn't, assume - // that this is a case where go list is reporting a fake dependency variant - // of the imported package: When a package tries to invalidly import another - // package, go list emits a variant of the imported package (with the same - // import path, but with an error on it, and the package will have a - // DepError set on it). An example of when this can happen is for imports of - // main packages: main packages can not be imported, but they may be - // separately matched and listed by another pattern. - // See golang.org/issue/36188 for more details. - - // The plan is that eventually, hopefully in Go 1.15, the error will be - // reported on the importing package rather than the duplicate "fake" - // version of the imported package. Once all supported versions of Go - // have the new behavior this logic can be deleted. - // TODO(matloob): delete the workaround logic once all supported versions of - // Go return the errors on the proper package. - - // There should be exactly one version of a package that doesn't have an - // error. - if old.Error == nil && p.Error == nil { - if !reflect.DeepEqual(p, old) { - return nil, fmt.Errorf("internal error: go list gives conflicting information for package %v", p.ImportPath) - } - continue - } - - // Determine if this package's error needs to be bubbled up. - // This is a hack, and we expect for go list to eventually set the error - // on the package. - if old.Error != nil { - var errkind string - if strings.Contains(old.Error.Err, "not an importable package") { - errkind = "not an importable package" - } else if strings.Contains(old.Error.Err, "use of internal package") && strings.Contains(old.Error.Err, "not allowed") { - errkind = "use of internal package not allowed" - } - if errkind != "" { - if len(old.Error.ImportStack) < 1 { - return nil, fmt.Errorf(`internal error: go list gave a %q error with empty import stack`, errkind) - } - importingPkg := old.Error.ImportStack[len(old.Error.ImportStack)-1] - if importingPkg == old.ImportPath { - // Using an older version of Go which put this package itself on top of import - // stack, instead of the importer. Look for importer in second from top - // position. - if len(old.Error.ImportStack) < 2 { - return nil, fmt.Errorf(`internal error: go list gave a %q error with an import stack without importing package`, errkind) - } - importingPkg = old.Error.ImportStack[len(old.Error.ImportStack)-2] - } - additionalErrors[importingPkg] = append(additionalErrors[importingPkg], Error{ - Pos: old.Error.Pos, - Msg: old.Error.Err, - Kind: ListError, - }) - } - } - - // Make sure that if there's a version of the package without an error, - // that's the one reported to the user. - if old.Error == nil { - continue - } - - // This package will replace the old one at the end of the loop. - } - seen[p.ImportPath] = p - - pkg := &Package{ - Name: p.Name, - ID: p.ImportPath, - GoFiles: absJoin(p.Dir, p.GoFiles, p.CgoFiles), - CompiledGoFiles: absJoin(p.Dir, p.CompiledGoFiles), - OtherFiles: absJoin(p.Dir, otherFiles(p)...), - EmbedFiles: absJoin(p.Dir, p.EmbedFiles), - EmbedPatterns: absJoin(p.Dir, p.EmbedPatterns), - IgnoredFiles: absJoin(p.Dir, p.IgnoredGoFiles, p.IgnoredOtherFiles), - forTest: p.ForTest, - depsErrors: p.DepsErrors, - Module: p.Module, - } - - if (state.cfg.Mode&typecheckCgo) != 0 && len(p.CgoFiles) != 0 { - if len(p.CompiledGoFiles) > len(p.GoFiles) { - // We need the cgo definitions, which are in the first - // CompiledGoFile after the non-cgo ones. This is a hack but there - // isn't currently a better way to find it. We also need the pure - // Go files and unprocessed cgo files, all of which are already - // in pkg.GoFiles. - cgoTypes := p.CompiledGoFiles[len(p.GoFiles)] - pkg.CompiledGoFiles = append([]string{cgoTypes}, pkg.GoFiles...) - } else { - // golang/go#38990: go list silently fails to do cgo processing - pkg.CompiledGoFiles = nil - pkg.Errors = append(pkg.Errors, Error{ - Msg: "go list failed to return CompiledGoFiles. This may indicate failure to perform cgo processing; try building at the command line. See https://golang.org/issue/38990.", - Kind: ListError, - }) - } - } - - // Work around https://golang.org/issue/28749: - // cmd/go puts assembly, C, and C++ files in CompiledGoFiles. - // Remove files from CompiledGoFiles that are non-go files - // (or are not files that look like they are from the cache). - if len(pkg.CompiledGoFiles) > 0 { - out := pkg.CompiledGoFiles[:0] - for _, f := range pkg.CompiledGoFiles { - if ext := filepath.Ext(f); ext != ".go" && ext != "" { // ext == "" means the file is from the cache, so probably cgo-processed file - continue - } - out = append(out, f) - } - pkg.CompiledGoFiles = out - } - - // Extract the PkgPath from the package's ID. - if i := strings.IndexByte(pkg.ID, ' '); i >= 0 { - pkg.PkgPath = pkg.ID[:i] - } else { - pkg.PkgPath = pkg.ID - } - - if pkg.PkgPath == "unsafe" { - pkg.CompiledGoFiles = nil // ignore fake unsafe.go file (#59929) - } else if len(pkg.CompiledGoFiles) == 0 { - // Work around for pre-go.1.11 versions of go list. - // TODO(matloob): they should be handled by the fallback. - // Can we delete this? - pkg.CompiledGoFiles = pkg.GoFiles - } - - // Assume go list emits only absolute paths for Dir. - if p.Dir != "" && !filepath.IsAbs(p.Dir) { - log.Fatalf("internal error: go list returned non-absolute Package.Dir: %s", p.Dir) - } - - if p.Export != "" && !filepath.IsAbs(p.Export) { - pkg.ExportFile = filepath.Join(p.Dir, p.Export) - } else { - pkg.ExportFile = p.Export - } - - // imports - // - // Imports contains the IDs of all imported packages. - // ImportsMap records (path, ID) only where they differ. - ids := make(map[string]bool) - for _, id := range p.Imports { - ids[id] = true - } - pkg.Imports = make(map[string]*Package) - for path, id := range p.ImportMap { - pkg.Imports[path] = &Package{ID: id} // non-identity import - delete(ids, id) - } - for id := range ids { - if id == "C" { - continue - } - - pkg.Imports[id] = &Package{ID: id} // identity import - } - if !p.DepOnly { - response.Roots = append(response.Roots, pkg.ID) - } - - // Temporary work-around for golang/go#39986. Parse filenames out of - // error messages. This happens if there are unrecoverable syntax - // errors in the source, so we can't match on a specific error message. - // - // TODO(rfindley): remove this heuristic, in favor of considering - // InvalidGoFiles from the list driver. - if err := p.Error; err != nil && state.shouldAddFilenameFromError(p) { - addFilenameFromPos := func(pos string) bool { - split := strings.Split(pos, ":") - if len(split) < 1 { - return false - } - filename := strings.TrimSpace(split[0]) - if filename == "" { - return false - } - if !filepath.IsAbs(filename) { - filename = filepath.Join(state.cfg.Dir, filename) - } - info, _ := os.Stat(filename) - if info == nil { - return false - } - pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, filename) - pkg.GoFiles = append(pkg.GoFiles, filename) - return true - } - found := addFilenameFromPos(err.Pos) - // In some cases, go list only reports the error position in the - // error text, not the error position. One such case is when the - // file's package name is a keyword (see golang.org/issue/39763). - if !found { - addFilenameFromPos(err.Err) - } - } - - if p.Error != nil { - msg := strings.TrimSpace(p.Error.Err) // Trim to work around golang.org/issue/32363. - // Address golang.org/issue/35964 by appending import stack to error message. - if msg == "import cycle not allowed" && len(p.Error.ImportStack) != 0 { - msg += fmt.Sprintf(": import stack: %v", p.Error.ImportStack) - } - pkg.Errors = append(pkg.Errors, Error{ - Pos: p.Error.Pos, - Msg: msg, - Kind: ListError, - }) - } - - pkgs[pkg.ID] = pkg - } - - for id, errs := range additionalErrors { - if p, ok := pkgs[id]; ok { - p.Errors = append(p.Errors, errs...) - } - } - for _, pkg := range pkgs { - response.Packages = append(response.Packages, pkg) - } - sort.Slice(response.Packages, func(i, j int) bool { return response.Packages[i].ID < response.Packages[j].ID }) - - return response, nil -} - -func (state *golistState) shouldAddFilenameFromError(p *jsonPackage) bool { - if len(p.GoFiles) > 0 || len(p.CompiledGoFiles) > 0 { - return false - } - - goV, err := state.getGoVersion() - if err != nil { - return false - } - - // On Go 1.14 and earlier, only add filenames from errors if the import stack is empty. - // The import stack behaves differently for these versions than newer Go versions. - if goV < 15 { - return len(p.Error.ImportStack) == 0 - } - - // On Go 1.15 and later, only parse filenames out of error if there's no import stack, - // or the current package is at the top of the import stack. This is not guaranteed - // to work perfectly, but should avoid some cases where files in errors don't belong to this - // package. - return len(p.Error.ImportStack) == 0 || p.Error.ImportStack[len(p.Error.ImportStack)-1] == p.ImportPath -} - -// getGoVersion returns the effective minor version of the go command. -func (state *golistState) getGoVersion() (int, error) { - state.goVersionOnce.Do(func() { - state.goVersion, state.goVersionError = gocommand.GoVersion(state.ctx, state.cfgInvocation(), state.cfg.gocmdRunner) - }) - return state.goVersion, state.goVersionError -} - -// getPkgPath finds the package path of a directory if it's relative to a root -// directory. -func (state *golistState) getPkgPath(dir string) (string, bool, error) { - absDir, err := filepath.Abs(dir) - if err != nil { - return "", false, err - } - roots, err := state.determineRootDirs() - if err != nil { - return "", false, err - } - - for rdir, rpath := range roots { - // Make sure that the directory is in the module, - // to avoid creating a path relative to another module. - if !strings.HasPrefix(absDir, rdir) { - continue - } - // TODO(matloob): This doesn't properly handle symlinks. - r, err := filepath.Rel(rdir, dir) - if err != nil { - continue - } - if rpath != "" { - // We choose only one root even though the directory even it can belong in multiple modules - // or GOPATH entries. This is okay because we only need to work with absolute dirs when a - // file is missing from disk, for instance when gopls calls go/packages in an overlay. - // Once the file is saved, gopls, or the next invocation of the tool will get the correct - // result straight from golist. - // TODO(matloob): Implement module tiebreaking? - return path.Join(rpath, filepath.ToSlash(r)), true, nil - } - return filepath.ToSlash(r), true, nil - } - return "", false, nil -} - -// absJoin absolutizes and flattens the lists of files. -func absJoin(dir string, fileses ...[]string) (res []string) { - for _, files := range fileses { - for _, file := range files { - if !filepath.IsAbs(file) { - file = filepath.Join(dir, file) - } - res = append(res, file) - } - } - return res -} - -func jsonFlag(cfg *Config, goVersion int) string { - if goVersion < 19 { - return "-json" - } - var fields []string - added := make(map[string]bool) - addFields := func(fs ...string) { - for _, f := range fs { - if !added[f] { - added[f] = true - fields = append(fields, f) - } - } - } - addFields("Name", "ImportPath", "Error") // These fields are always needed - if cfg.Mode&NeedFiles != 0 || cfg.Mode&NeedTypes != 0 { - addFields("Dir", "GoFiles", "IgnoredGoFiles", "IgnoredOtherFiles", "CFiles", - "CgoFiles", "CXXFiles", "MFiles", "HFiles", "FFiles", "SFiles", - "SwigFiles", "SwigCXXFiles", "SysoFiles") - if cfg.Tests { - addFields("TestGoFiles", "XTestGoFiles") - } - } - if cfg.Mode&NeedTypes != 0 { - // CompiledGoFiles seems to be required for the test case TestCgoNoSyntax, - // even when -compiled isn't passed in. - // TODO(#52435): Should we make the test ask for -compiled, or automatically - // request CompiledGoFiles in certain circumstances? - addFields("Dir", "CompiledGoFiles") - } - if cfg.Mode&NeedCompiledGoFiles != 0 { - addFields("Dir", "CompiledGoFiles", "Export") - } - if cfg.Mode&NeedImports != 0 { - // When imports are requested, DepOnly is used to distinguish between packages - // explicitly requested and transitive imports of those packages. - addFields("DepOnly", "Imports", "ImportMap") - if cfg.Tests { - addFields("TestImports", "XTestImports") - } - } - if cfg.Mode&NeedDeps != 0 { - addFields("DepOnly") - } - if usesExportData(cfg) { - // Request Dir in the unlikely case Export is not absolute. - addFields("Dir", "Export") - } - if cfg.Mode&needInternalForTest != 0 { - addFields("ForTest") - } - if cfg.Mode&needInternalDepsErrors != 0 { - addFields("DepsErrors") - } - if cfg.Mode&NeedModule != 0 { - addFields("Module") - } - if cfg.Mode&NeedEmbedFiles != 0 { - addFields("EmbedFiles") - } - if cfg.Mode&NeedEmbedPatterns != 0 { - addFields("EmbedPatterns") - } - return "-json=" + strings.Join(fields, ",") -} - -func golistargs(cfg *Config, words []string, goVersion int) []string { - const findFlags = NeedImports | NeedTypes | NeedSyntax | NeedTypesInfo - fullargs := []string{ - "-e", jsonFlag(cfg, goVersion), - fmt.Sprintf("-compiled=%t", cfg.Mode&(NeedCompiledGoFiles|NeedSyntax|NeedTypes|NeedTypesInfo|NeedTypesSizes) != 0), - fmt.Sprintf("-test=%t", cfg.Tests), - fmt.Sprintf("-export=%t", usesExportData(cfg)), - fmt.Sprintf("-deps=%t", cfg.Mode&NeedImports != 0), - // go list doesn't let you pass -test and -find together, - // probably because you'd just get the TestMain. - fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0 && !usesExportData(cfg)), - } - - // golang/go#60456: with go1.21 and later, go list serves pgo variants, which - // can be costly to compute and may result in redundant processing for the - // caller. Disable these variants. If someone wants to add e.g. a NeedPGO - // mode flag, that should be a separate proposal. - if goVersion >= 21 { - fullargs = append(fullargs, "-pgo=off") - } - - fullargs = append(fullargs, cfg.BuildFlags...) - fullargs = append(fullargs, "--") - fullargs = append(fullargs, words...) - return fullargs -} - -// cfgInvocation returns an Invocation that reflects cfg's settings. -func (state *golistState) cfgInvocation() gocommand.Invocation { - cfg := state.cfg - return gocommand.Invocation{ - BuildFlags: cfg.BuildFlags, - ModFile: cfg.modFile, - ModFlag: cfg.modFlag, - CleanEnv: cfg.Env != nil, - Env: cfg.Env, - Logf: cfg.Logf, - WorkingDir: cfg.Dir, - } -} - -// invokeGo returns the stdout of a go command invocation. -func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer, error) { - cfg := state.cfg - - inv := state.cfgInvocation() - - // For Go versions 1.16 and above, `go list` accepts overlays directly via - // the -overlay flag. Set it, if it's available. - // - // The check for "list" is not necessarily required, but we should avoid - // getting the go version if possible. - if verb == "list" { - goVersion, err := state.getGoVersion() - if err != nil { - return nil, err - } - if goVersion >= 16 { - filename, cleanup, err := state.writeOverlays() - if err != nil { - return nil, err - } - defer cleanup() - inv.Overlay = filename - } - } - inv.Verb = verb - inv.Args = args - gocmdRunner := cfg.gocmdRunner - if gocmdRunner == nil { - gocmdRunner = &gocommand.Runner{} - } - stdout, stderr, friendlyErr, err := gocmdRunner.RunRaw(cfg.Context, inv) - if err != nil { - // Check for 'go' executable not being found. - if ee, ok := err.(*exec.Error); ok && ee.Err == exec.ErrNotFound { - return nil, fmt.Errorf("'go list' driver requires 'go', but %s", exec.ErrNotFound) - } - - exitErr, ok := err.(*exec.ExitError) - if !ok { - // Catastrophic error: - // - context cancellation - return nil, fmt.Errorf("couldn't run 'go': %w", err) - } - - // Old go version? - if strings.Contains(stderr.String(), "flag provided but not defined") { - return nil, goTooOldError{fmt.Errorf("unsupported version of go: %s: %s", exitErr, stderr)} - } - - // Related to #24854 - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "unexpected directory layout") { - return nil, friendlyErr - } - - // Is there an error running the C compiler in cgo? This will be reported in the "Error" field - // and should be suppressed by go list -e. - // - // This condition is not perfect yet because the error message can include other error messages than runtime/cgo. - isPkgPathRune := func(r rune) bool { - // From https://golang.org/ref/spec#Import_declarations: - // Implementation restriction: A compiler may restrict ImportPaths to non-empty strings - // using only characters belonging to Unicode's L, M, N, P, and S general categories - // (the Graphic characters without spaces) and may also exclude the - // characters !"#$%&'()*,:;<=>?[\]^`{|} and the Unicode replacement character U+FFFD. - return unicode.IsOneOf([]*unicode.RangeTable{unicode.L, unicode.M, unicode.N, unicode.P, unicode.S}, r) && - !strings.ContainsRune("!\"#$%&'()*,:;<=>?[\\]^`{|}\uFFFD", r) - } - // golang/go#36770: Handle case where cmd/go prints module download messages before the error. - msg := stderr.String() - for strings.HasPrefix(msg, "go: downloading") { - msg = msg[strings.IndexRune(msg, '\n')+1:] - } - if len(stderr.String()) > 0 && strings.HasPrefix(stderr.String(), "# ") { - msg := msg[len("# "):] - if strings.HasPrefix(strings.TrimLeftFunc(msg, isPkgPathRune), "\n") { - return stdout, nil - } - // Treat pkg-config errors as a special case (golang.org/issue/36770). - if strings.HasPrefix(msg, "pkg-config") { - return stdout, nil - } - } - - // This error only appears in stderr. See golang.org/cl/166398 for a fix in go list to show - // the error in the Err section of stdout in case -e option is provided. - // This fix is provided for backwards compatibility. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must be .go files") { - output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Similar to the previous error, but currently lacks a fix in Go. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must all be in one directory") { - output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Backwards compatibility for Go 1.11 because 1.12 and 1.13 put the directory in the ImportPath. - // If the package doesn't exist, put the absolute path of the directory into the error message, - // as Go 1.13 list does. - const noSuchDirectory = "no such directory" - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), noSuchDirectory) { - errstr := stderr.String() - abspath := strings.TrimSpace(errstr[strings.Index(errstr, noSuchDirectory)+len(noSuchDirectory):]) - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - abspath, strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Workaround for #29280: go list -e has incorrect behavior when an ad-hoc package doesn't exist. - // Note that the error message we look for in this case is different that the one looked for above. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no such file or directory") { - output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Workaround for #34273. go list -e with GO111MODULE=on has incorrect behavior when listing a - // directory outside any module. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside available modules") { - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - // TODO(matloob): command-line-arguments isn't correct here. - "command-line-arguments", strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Another variation of the previous error - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "outside module root") { - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - // TODO(matloob): command-line-arguments isn't correct here. - "command-line-arguments", strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Workaround for an instance of golang.org/issue/26755: go list -e will return a non-zero exit - // status if there's a dependency on a package that doesn't exist. But it should return - // a zero exit status and set an error on that package. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no Go files in") { - // Don't clobber stdout if `go list` actually returned something. - if len(stdout.String()) > 0 { - return stdout, nil - } - // try to extract package name from string - stderrStr := stderr.String() - var importPath string - colon := strings.Index(stderrStr, ":") - if colon > 0 && strings.HasPrefix(stderrStr, "go build ") { - importPath = stderrStr[len("go build "):colon] - } - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - importPath, strings.Trim(stderrStr, "\n")) - return bytes.NewBufferString(output), nil - } - - // Export mode entails a build. - // If that build fails, errors appear on stderr - // (despite the -e flag) and the Export field is blank. - // Do not fail in that case. - // The same is true if an ad-hoc package given to go list doesn't exist. - // TODO(matloob): Remove these once we can depend on go list to exit with a zero status with -e even when - // packages don't exist or a build fails. - if !usesExportData(cfg) && !containsGoFile(args) { - return nil, friendlyErr - } - } - return stdout, nil -} - -// OverlayJSON is the format overlay files are expected to be in. -// The Replace map maps from overlaid paths to replacement paths: -// the Go command will forward all reads trying to open -// each overlaid path to its replacement path, or consider the overlaid -// path not to exist if the replacement path is empty. -// -// From golang/go#39958. -type OverlayJSON struct { - Replace map[string]string `json:"replace,omitempty"` -} - -// writeOverlays writes out files for go list's -overlay flag, as described -// above. -func (state *golistState) writeOverlays() (filename string, cleanup func(), err error) { - // Do nothing if there are no overlays in the config. - if len(state.cfg.Overlay) == 0 { - return "", func() {}, nil - } - dir, err := os.MkdirTemp("", "gopackages-*") - if err != nil { - return "", nil, err - } - // The caller must clean up this directory, unless this function returns an - // error. - cleanup = func() { - os.RemoveAll(dir) - } - defer func() { - if err != nil { - cleanup() - } - }() - overlays := map[string]string{} - for k, v := range state.cfg.Overlay { - // Create a unique filename for the overlaid files, to avoid - // creating nested directories. - noSeparator := strings.Join(strings.Split(filepath.ToSlash(k), "/"), "") - f, err := os.CreateTemp(dir, fmt.Sprintf("*-%s", noSeparator)) - if err != nil { - return "", func() {}, err - } - if _, err := f.Write(v); err != nil { - return "", func() {}, err - } - if err := f.Close(); err != nil { - return "", func() {}, err - } - overlays[k] = f.Name() - } - b, err := json.Marshal(OverlayJSON{Replace: overlays}) - if err != nil { - return "", func() {}, err - } - // Write out the overlay file that contains the filepath mappings. - filename = filepath.Join(dir, "overlay.json") - if err := os.WriteFile(filename, b, 0665); err != nil { - return "", func() {}, err - } - return filename, cleanup, nil -} - -func containsGoFile(s []string) bool { - for _, f := range s { - if strings.HasSuffix(f, ".go") { - return true - } - } - return false -} - -func cmdDebugStr(cmd *exec.Cmd) string { - env := make(map[string]string) - for _, kv := range cmd.Env { - split := strings.SplitN(kv, "=", 2) - k, v := split[0], split[1] - env[k] = v - } - - var args []string - for _, arg := range cmd.Args { - quoted := strconv.Quote(arg) - if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") { - args = append(args, quoted) - } else { - args = append(args, arg) - } - } - return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " ")) -} diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/golist_overlay.go b/go/extractor/vendor/golang.org/x/tools/go/packages/golist_overlay.go deleted file mode 100644 index d823c474ad3a..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/golist_overlay.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -import ( - "encoding/json" - "path/filepath" - - "golang.org/x/tools/internal/gocommand" -) - -// determineRootDirs returns a mapping from absolute directories that could -// contain code to their corresponding import path prefixes. -func (state *golistState) determineRootDirs() (map[string]string, error) { - env, err := state.getEnv() - if err != nil { - return nil, err - } - if env["GOMOD"] != "" { - state.rootsOnce.Do(func() { - state.rootDirs, state.rootDirsError = state.determineRootDirsModules() - }) - } else { - state.rootsOnce.Do(func() { - state.rootDirs, state.rootDirsError = state.determineRootDirsGOPATH() - }) - } - return state.rootDirs, state.rootDirsError -} - -func (state *golistState) determineRootDirsModules() (map[string]string, error) { - // List all of the modules--the first will be the directory for the main - // module. Any replaced modules will also need to be treated as roots. - // Editing files in the module cache isn't a great idea, so we don't - // plan to ever support that. - out, err := state.invokeGo("list", "-m", "-json", "all") - if err != nil { - // 'go list all' will fail if we're outside of a module and - // GO111MODULE=on. Try falling back without 'all'. - var innerErr error - out, innerErr = state.invokeGo("list", "-m", "-json") - if innerErr != nil { - return nil, err - } - } - roots := map[string]string{} - modules := map[string]string{} - var i int - for dec := json.NewDecoder(out); dec.More(); { - mod := new(gocommand.ModuleJSON) - if err := dec.Decode(mod); err != nil { - return nil, err - } - if mod.Dir != "" && mod.Path != "" { - // This is a valid module; add it to the map. - absDir, err := filepath.Abs(mod.Dir) - if err != nil { - return nil, err - } - modules[absDir] = mod.Path - // The first result is the main module. - if i == 0 || mod.Replace != nil && mod.Replace.Path != "" { - roots[absDir] = mod.Path - } - } - i++ - } - return roots, nil -} - -func (state *golistState) determineRootDirsGOPATH() (map[string]string, error) { - m := map[string]string{} - for _, dir := range filepath.SplitList(state.mustGetEnv()["GOPATH"]) { - absDir, err := filepath.Abs(dir) - if err != nil { - return nil, err - } - m[filepath.Join(absDir, "src")] = "" - } - return m, nil -} diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/loadmode_string.go b/go/extractor/vendor/golang.org/x/tools/go/packages/loadmode_string.go deleted file mode 100644 index 5c080d21b54a..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/loadmode_string.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -import ( - "fmt" - "strings" -) - -var allModes = []LoadMode{ - NeedName, - NeedFiles, - NeedCompiledGoFiles, - NeedImports, - NeedDeps, - NeedExportFile, - NeedTypes, - NeedSyntax, - NeedTypesInfo, - NeedTypesSizes, -} - -var modeStrings = []string{ - "NeedName", - "NeedFiles", - "NeedCompiledGoFiles", - "NeedImports", - "NeedDeps", - "NeedExportFile", - "NeedTypes", - "NeedSyntax", - "NeedTypesInfo", - "NeedTypesSizes", -} - -func (mod LoadMode) String() string { - m := mod - if m == 0 { - return "LoadMode(0)" - } - var out []string - for i, x := range allModes { - if x > m { - break - } - if (m & x) != 0 { - out = append(out, modeStrings[i]) - m = m ^ x - } - } - if m != 0 { - out = append(out, "Unknown") - } - return fmt.Sprintf("LoadMode(%s)", strings.Join(out, "|")) -} diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go b/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go deleted file mode 100644 index f33b0afc22cf..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go +++ /dev/null @@ -1,1313 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -// See doc.go for package documentation and implementation notes. - -import ( - "context" - "encoding/json" - "fmt" - "go/ast" - "go/parser" - "go/scanner" - "go/token" - "go/types" - "io" - "log" - "os" - "path/filepath" - "runtime" - "strings" - "sync" - "time" - - "golang.org/x/tools/go/gcexportdata" - "golang.org/x/tools/internal/gocommand" - "golang.org/x/tools/internal/packagesinternal" - "golang.org/x/tools/internal/typesinternal" - "golang.org/x/tools/internal/versions" -) - -// A LoadMode controls the amount of detail to return when loading. -// The bits below can be combined to specify which fields should be -// filled in the result packages. -// The zero value is a special case, equivalent to combining -// the NeedName, NeedFiles, and NeedCompiledGoFiles bits. -// ID and Errors (if present) will always be filled. -// Load may return more information than requested. -type LoadMode int - -const ( - // NeedName adds Name and PkgPath. - NeedName LoadMode = 1 << iota - - // NeedFiles adds GoFiles and OtherFiles. - NeedFiles - - // NeedCompiledGoFiles adds CompiledGoFiles. - NeedCompiledGoFiles - - // NeedImports adds Imports. If NeedDeps is not set, the Imports field will contain - // "placeholder" Packages with only the ID set. - NeedImports - - // NeedDeps adds the fields requested by the LoadMode in the packages in Imports. - NeedDeps - - // NeedExportFile adds ExportFile. - NeedExportFile - - // NeedTypes adds Types, Fset, and IllTyped. - NeedTypes - - // NeedSyntax adds Syntax. - NeedSyntax - - // NeedTypesInfo adds TypesInfo. - NeedTypesInfo - - // NeedTypesSizes adds TypesSizes. - NeedTypesSizes - - // needInternalDepsErrors adds the internal deps errors field for use by gopls. - needInternalDepsErrors - - // needInternalForTest adds the internal forTest field. - // Tests must also be set on the context for this field to be populated. - needInternalForTest - - // typecheckCgo enables full support for type checking cgo. Requires Go 1.15+. - // Modifies CompiledGoFiles and Types, and has no effect on its own. - typecheckCgo - - // NeedModule adds Module. - NeedModule - - // NeedEmbedFiles adds EmbedFiles. - NeedEmbedFiles - - // NeedEmbedPatterns adds EmbedPatterns. - NeedEmbedPatterns -) - -const ( - // Deprecated: LoadFiles exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadFiles = NeedName | NeedFiles | NeedCompiledGoFiles - - // Deprecated: LoadImports exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadImports = LoadFiles | NeedImports - - // Deprecated: LoadTypes exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadTypes = LoadImports | NeedTypes | NeedTypesSizes - - // Deprecated: LoadSyntax exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadSyntax = LoadTypes | NeedSyntax | NeedTypesInfo - - // Deprecated: LoadAllSyntax exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadAllSyntax = LoadSyntax | NeedDeps - - // Deprecated: NeedExportsFile is a historical misspelling of NeedExportFile. - NeedExportsFile = NeedExportFile -) - -// A Config specifies details about how packages should be loaded. -// The zero value is a valid configuration. -// Calls to Load do not modify this struct. -type Config struct { - // Mode controls the level of information returned for each package. - Mode LoadMode - - // Context specifies the context for the load operation. - // If the context is cancelled, the loader may stop early - // and return an ErrCancelled error. - // If Context is nil, the load cannot be cancelled. - Context context.Context - - // Logf is the logger for the config. - // If the user provides a logger, debug logging is enabled. - // If the GOPACKAGESDEBUG environment variable is set to true, - // but the logger is nil, default to log.Printf. - Logf func(format string, args ...interface{}) - - // Dir is the directory in which to run the build system's query tool - // that provides information about the packages. - // If Dir is empty, the tool is run in the current directory. - Dir string - - // Env is the environment to use when invoking the build system's query tool. - // If Env is nil, the current environment is used. - // As in os/exec's Cmd, only the last value in the slice for - // each environment key is used. To specify the setting of only - // a few variables, append to the current environment, as in: - // - // opt.Env = append(os.Environ(), "GOOS=plan9", "GOARCH=386") - // - Env []string - - // gocmdRunner guards go command calls from concurrency errors. - gocmdRunner *gocommand.Runner - - // BuildFlags is a list of command-line flags to be passed through to - // the build system's query tool. - BuildFlags []string - - // modFile will be used for -modfile in go command invocations. - modFile string - - // modFlag will be used for -modfile in go command invocations. - modFlag string - - // Fset provides source position information for syntax trees and types. - // If Fset is nil, Load will use a new fileset, but preserve Fset's value. - Fset *token.FileSet - - // ParseFile is called to read and parse each file - // when preparing a package's type-checked syntax tree. - // It must be safe to call ParseFile simultaneously from multiple goroutines. - // If ParseFile is nil, the loader will uses parser.ParseFile. - // - // ParseFile should parse the source from src and use filename only for - // recording position information. - // - // An application may supply a custom implementation of ParseFile - // to change the effective file contents or the behavior of the parser, - // or to modify the syntax tree. For example, selectively eliminating - // unwanted function bodies can significantly accelerate type checking. - ParseFile func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) - - // If Tests is set, the loader includes not just the packages - // matching a particular pattern but also any related test packages, - // including test-only variants of the package and the test executable. - // - // For example, when using the go command, loading "fmt" with Tests=true - // returns four packages, with IDs "fmt" (the standard package), - // "fmt [fmt.test]" (the package as compiled for the test), - // "fmt_test" (the test functions from source files in package fmt_test), - // and "fmt.test" (the test binary). - // - // In build systems with explicit names for tests, - // setting Tests may have no effect. - Tests bool - - // Overlay provides a mapping of absolute file paths to file contents. - // If the file with the given path already exists, the parser will use the - // alternative file contents provided by the map. - // - // Overlays provide incomplete support for when a given file doesn't - // already exist on disk. See the package doc above for more details. - Overlay map[string][]byte -} - -// Load loads and returns the Go packages named by the given patterns. -// -// Config specifies loading options; -// nil behaves the same as an empty Config. -// -// Load returns an error if any of the patterns was invalid -// as defined by the underlying build system. -// It may return an empty list of packages without an error, -// for instance for an empty expansion of a valid wildcard. -// Errors associated with a particular package are recorded in the -// corresponding Package's Errors list, and do not cause Load to -// return an error. Clients may need to handle such errors before -// proceeding with further analysis. The PrintErrors function is -// provided for convenient display of all errors. -func Load(cfg *Config, patterns ...string) ([]*Package, error) { - ld := newLoader(cfg) - response, external, err := defaultDriver(&ld.Config, patterns...) - if err != nil { - return nil, err - } - - ld.sizes = types.SizesFor(response.Compiler, response.Arch) - if ld.sizes == nil && ld.Config.Mode&(NeedTypes|NeedTypesSizes|NeedTypesInfo) != 0 { - // Type size information is needed but unavailable. - if external { - // An external driver may fail to populate the Compiler/GOARCH fields, - // especially since they are relatively new (see #63700). - // Provide a sensible fallback in this case. - ld.sizes = types.SizesFor("gc", runtime.GOARCH) - if ld.sizes == nil { // gccgo-only arch - ld.sizes = types.SizesFor("gc", "amd64") - } - } else { - // Go list should never fail to deliver accurate size information. - // Reject the whole Load since the error is the same for every package. - return nil, fmt.Errorf("can't determine type sizes for compiler %q on GOARCH %q", - response.Compiler, response.Arch) - } - } - - return ld.refine(response) -} - -// defaultDriver is a driver that implements go/packages' fallback behavior. -// It will try to request to an external driver, if one exists. If there's -// no external driver, or the driver returns a response with NotHandled set, -// defaultDriver will fall back to the go list driver. -// The boolean result indicates that an external driver handled the request. -func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, error) { - if driver := findExternalDriver(cfg); driver != nil { - response, err := driver(cfg, patterns...) - if err != nil { - return nil, false, err - } else if !response.NotHandled { - return response, true, nil - } - // (fall through) - } - - response, err := goListDriver(cfg, patterns...) - if err != nil { - return nil, false, err - } - return response, false, nil -} - -// A Package describes a loaded Go package. -type Package struct { - // ID is a unique identifier for a package, - // in a syntax provided by the underlying build system. - // - // Because the syntax varies based on the build system, - // clients should treat IDs as opaque and not attempt to - // interpret them. - ID string - - // Name is the package name as it appears in the package source code. - Name string - - // PkgPath is the package path as used by the go/types package. - PkgPath string - - // Errors contains any errors encountered querying the metadata - // of the package, or while parsing or type-checking its files. - Errors []Error - - // TypeErrors contains the subset of errors produced during type checking. - TypeErrors []types.Error - - // GoFiles lists the absolute file paths of the package's Go source files. - // It may include files that should not be compiled, for example because - // they contain non-matching build tags, are documentary pseudo-files such as - // unsafe/unsafe.go or builtin/builtin.go, or are subject to cgo preprocessing. - GoFiles []string - - // CompiledGoFiles lists the absolute file paths of the package's source - // files that are suitable for type checking. - // This may differ from GoFiles if files are processed before compilation. - CompiledGoFiles []string - - // OtherFiles lists the absolute file paths of the package's non-Go source files, - // including assembly, C, C++, Fortran, Objective-C, SWIG, and so on. - OtherFiles []string - - // EmbedFiles lists the absolute file paths of the package's files - // embedded with go:embed. - EmbedFiles []string - - // EmbedPatterns lists the absolute file patterns of the package's - // files embedded with go:embed. - EmbedPatterns []string - - // IgnoredFiles lists source files that are not part of the package - // using the current build configuration but that might be part of - // the package using other build configurations. - IgnoredFiles []string - - // ExportFile is the absolute path to a file containing type - // information for the package as provided by the build system. - ExportFile string - - // Imports maps import paths appearing in the package's Go source files - // to corresponding loaded Packages. - Imports map[string]*Package - - // Types provides type information for the package. - // The NeedTypes LoadMode bit sets this field for packages matching the - // patterns; type information for dependencies may be missing or incomplete, - // unless NeedDeps and NeedImports are also set. - Types *types.Package - - // Fset provides position information for Types, TypesInfo, and Syntax. - // It is set only when Types is set. - Fset *token.FileSet - - // IllTyped indicates whether the package or any dependency contains errors. - // It is set only when Types is set. - IllTyped bool - - // Syntax is the package's syntax trees, for the files listed in CompiledGoFiles. - // - // The NeedSyntax LoadMode bit populates this field for packages matching the patterns. - // If NeedDeps and NeedImports are also set, this field will also be populated - // for dependencies. - // - // Syntax is kept in the same order as CompiledGoFiles, with the caveat that nils are - // removed. If parsing returned nil, Syntax may be shorter than CompiledGoFiles. - Syntax []*ast.File - - // TypesInfo provides type information about the package's syntax trees. - // It is set only when Syntax is set. - TypesInfo *types.Info - - // TypesSizes provides the effective size function for types in TypesInfo. - TypesSizes types.Sizes - - // forTest is the package under test, if any. - forTest string - - // depsErrors is the DepsErrors field from the go list response, if any. - depsErrors []*packagesinternal.PackageError - - // module is the module information for the package if it exists. - Module *Module -} - -// Module provides module information for a package. -type Module struct { - Path string // module path - Version string // module version - Replace *Module // replaced by this module - Time *time.Time // time version was created - Main bool // is this the main module? - Indirect bool // is this module only an indirect dependency of main module? - Dir string // directory holding files for this module, if any - GoMod string // path to go.mod file used when loading this module, if any - GoVersion string // go version used in module - Error *ModuleError // error loading module -} - -// ModuleError holds errors loading a module. -type ModuleError struct { - Err string // the error itself -} - -func init() { - packagesinternal.GetForTest = func(p interface{}) string { - return p.(*Package).forTest - } - packagesinternal.GetDepsErrors = func(p interface{}) []*packagesinternal.PackageError { - return p.(*Package).depsErrors - } - packagesinternal.SetModFile = func(config interface{}, value string) { - config.(*Config).modFile = value - } - packagesinternal.SetModFlag = func(config interface{}, value string) { - config.(*Config).modFlag = value - } - packagesinternal.TypecheckCgo = int(typecheckCgo) - packagesinternal.DepsErrors = int(needInternalDepsErrors) - packagesinternal.ForTest = int(needInternalForTest) -} - -// An Error describes a problem with a package's metadata, syntax, or types. -type Error struct { - Pos string // "file:line:col" or "file:line" or "" or "-" - Msg string - Kind ErrorKind -} - -// ErrorKind describes the source of the error, allowing the user to -// differentiate between errors generated by the driver, the parser, or the -// type-checker. -type ErrorKind int - -const ( - UnknownError ErrorKind = iota - ListError - ParseError - TypeError -) - -func (err Error) Error() string { - pos := err.Pos - if pos == "" { - pos = "-" // like token.Position{}.String() - } - return pos + ": " + err.Msg -} - -// flatPackage is the JSON form of Package -// It drops all the type and syntax fields, and transforms the Imports -// -// TODO(adonovan): identify this struct with Package, effectively -// publishing the JSON protocol. -type flatPackage struct { - ID string - Name string `json:",omitempty"` - PkgPath string `json:",omitempty"` - Errors []Error `json:",omitempty"` - GoFiles []string `json:",omitempty"` - CompiledGoFiles []string `json:",omitempty"` - OtherFiles []string `json:",omitempty"` - EmbedFiles []string `json:",omitempty"` - EmbedPatterns []string `json:",omitempty"` - IgnoredFiles []string `json:",omitempty"` - ExportFile string `json:",omitempty"` - Imports map[string]string `json:",omitempty"` -} - -// MarshalJSON returns the Package in its JSON form. -// For the most part, the structure fields are written out unmodified, and -// the type and syntax fields are skipped. -// The imports are written out as just a map of path to package id. -// The errors are written using a custom type that tries to preserve the -// structure of error types we know about. -// -// This method exists to enable support for additional build systems. It is -// not intended for use by clients of the API and we may change the format. -func (p *Package) MarshalJSON() ([]byte, error) { - flat := &flatPackage{ - ID: p.ID, - Name: p.Name, - PkgPath: p.PkgPath, - Errors: p.Errors, - GoFiles: p.GoFiles, - CompiledGoFiles: p.CompiledGoFiles, - OtherFiles: p.OtherFiles, - EmbedFiles: p.EmbedFiles, - EmbedPatterns: p.EmbedPatterns, - IgnoredFiles: p.IgnoredFiles, - ExportFile: p.ExportFile, - } - if len(p.Imports) > 0 { - flat.Imports = make(map[string]string, len(p.Imports)) - for path, ipkg := range p.Imports { - flat.Imports[path] = ipkg.ID - } - } - return json.Marshal(flat) -} - -// UnmarshalJSON reads in a Package from its JSON format. -// See MarshalJSON for details about the format accepted. -func (p *Package) UnmarshalJSON(b []byte) error { - flat := &flatPackage{} - if err := json.Unmarshal(b, &flat); err != nil { - return err - } - *p = Package{ - ID: flat.ID, - Name: flat.Name, - PkgPath: flat.PkgPath, - Errors: flat.Errors, - GoFiles: flat.GoFiles, - CompiledGoFiles: flat.CompiledGoFiles, - OtherFiles: flat.OtherFiles, - EmbedFiles: flat.EmbedFiles, - EmbedPatterns: flat.EmbedPatterns, - ExportFile: flat.ExportFile, - } - if len(flat.Imports) > 0 { - p.Imports = make(map[string]*Package, len(flat.Imports)) - for path, id := range flat.Imports { - p.Imports[path] = &Package{ID: id} - } - } - return nil -} - -func (p *Package) String() string { return p.ID } - -// loaderPackage augments Package with state used during the loading phase -type loaderPackage struct { - *Package - importErrors map[string]error // maps each bad import to its error - loadOnce sync.Once - color uint8 // for cycle detection - needsrc bool // load from source (Mode >= LoadTypes) - needtypes bool // type information is either requested or depended on - initial bool // package was matched by a pattern - goVersion int // minor version number of go command on PATH -} - -// loader holds the working state of a single call to load. -type loader struct { - pkgs map[string]*loaderPackage - Config - sizes types.Sizes // non-nil if needed by mode - parseCache map[string]*parseValue - parseCacheMu sync.Mutex - exportMu sync.Mutex // enforces mutual exclusion of exportdata operations - - // Config.Mode contains the implied mode (see impliedLoadMode). - // Implied mode contains all the fields we need the data for. - // In requestedMode there are the actually requested fields. - // We'll zero them out before returning packages to the user. - // This makes it easier for us to get the conditions where - // we need certain modes right. - requestedMode LoadMode -} - -type parseValue struct { - f *ast.File - err error - ready chan struct{} -} - -func newLoader(cfg *Config) *loader { - ld := &loader{ - parseCache: map[string]*parseValue{}, - } - if cfg != nil { - ld.Config = *cfg - // If the user has provided a logger, use it. - ld.Config.Logf = cfg.Logf - } - if ld.Config.Logf == nil { - // If the GOPACKAGESDEBUG environment variable is set to true, - // but the user has not provided a logger, default to log.Printf. - if debug { - ld.Config.Logf = log.Printf - } else { - ld.Config.Logf = func(format string, args ...interface{}) {} - } - } - if ld.Config.Mode == 0 { - ld.Config.Mode = NeedName | NeedFiles | NeedCompiledGoFiles // Preserve zero behavior of Mode for backwards compatibility. - } - if ld.Config.Env == nil { - ld.Config.Env = os.Environ() - } - if ld.Config.gocmdRunner == nil { - ld.Config.gocmdRunner = &gocommand.Runner{} - } - if ld.Context == nil { - ld.Context = context.Background() - } - if ld.Dir == "" { - if dir, err := os.Getwd(); err == nil { - ld.Dir = dir - } - } - - // Save the actually requested fields. We'll zero them out before returning packages to the user. - ld.requestedMode = ld.Mode - ld.Mode = impliedLoadMode(ld.Mode) - - if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 { - if ld.Fset == nil { - ld.Fset = token.NewFileSet() - } - - // ParseFile is required even in LoadTypes mode - // because we load source if export data is missing. - if ld.ParseFile == nil { - ld.ParseFile = func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) { - const mode = parser.AllErrors | parser.ParseComments - return parser.ParseFile(fset, filename, src, mode) - } - } - } - - return ld -} - -// refine connects the supplied packages into a graph and then adds type -// and syntax information as requested by the LoadMode. -func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { - roots := response.Roots - rootMap := make(map[string]int, len(roots)) - for i, root := range roots { - rootMap[root] = i - } - ld.pkgs = make(map[string]*loaderPackage) - // first pass, fixup and build the map and roots - var initial = make([]*loaderPackage, len(roots)) - for _, pkg := range response.Packages { - rootIndex := -1 - if i, found := rootMap[pkg.ID]; found { - rootIndex = i - } - - // Overlays can invalidate export data. - // TODO(matloob): make this check fine-grained based on dependencies on overlaid files - exportDataInvalid := len(ld.Overlay) > 0 || pkg.ExportFile == "" && pkg.PkgPath != "unsafe" - // This package needs type information if the caller requested types and the package is - // either a root, or it's a non-root and the user requested dependencies ... - needtypes := (ld.Mode&NeedTypes|NeedTypesInfo != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) - // This package needs source if the call requested source (or types info, which implies source) - // and the package is either a root, or itas a non- root and the user requested dependencies... - needsrc := ((ld.Mode&(NeedSyntax|NeedTypesInfo) != 0 && (rootIndex >= 0 || ld.Mode&NeedDeps != 0)) || - // ... or if we need types and the exportData is invalid. We fall back to (incompletely) - // typechecking packages from source if they fail to compile. - (ld.Mode&(NeedTypes|NeedTypesInfo) != 0 && exportDataInvalid)) && pkg.PkgPath != "unsafe" - lpkg := &loaderPackage{ - Package: pkg, - needtypes: needtypes, - needsrc: needsrc, - goVersion: response.GoVersion, - } - ld.pkgs[lpkg.ID] = lpkg - if rootIndex >= 0 { - initial[rootIndex] = lpkg - lpkg.initial = true - } - } - for i, root := range roots { - if initial[i] == nil { - return nil, fmt.Errorf("root package %v is missing", root) - } - } - - if ld.Mode&NeedImports != 0 { - // Materialize the import graph. - - const ( - white = 0 // new - grey = 1 // in progress - black = 2 // complete - ) - - // visit traverses the import graph, depth-first, - // and materializes the graph as Packages.Imports. - // - // Valid imports are saved in the Packages.Import map. - // Invalid imports (cycles and missing nodes) are saved in the importErrors map. - // Thus, even in the presence of both kinds of errors, - // the Import graph remains a DAG. - // - // visit returns whether the package needs src or has a transitive - // dependency on a package that does. These are the only packages - // for which we load source code. - var stack []*loaderPackage - var visit func(lpkg *loaderPackage) bool - visit = func(lpkg *loaderPackage) bool { - switch lpkg.color { - case black: - return lpkg.needsrc - case grey: - panic("internal error: grey node") - } - lpkg.color = grey - stack = append(stack, lpkg) // push - stubs := lpkg.Imports // the structure form has only stubs with the ID in the Imports - lpkg.Imports = make(map[string]*Package, len(stubs)) - for importPath, ipkg := range stubs { - var importErr error - imp := ld.pkgs[ipkg.ID] - if imp == nil { - // (includes package "C" when DisableCgo) - importErr = fmt.Errorf("missing package: %q", ipkg.ID) - } else if imp.color == grey { - importErr = fmt.Errorf("import cycle: %s", stack) - } - if importErr != nil { - if lpkg.importErrors == nil { - lpkg.importErrors = make(map[string]error) - } - lpkg.importErrors[importPath] = importErr - continue - } - - if visit(imp) { - lpkg.needsrc = true - } - lpkg.Imports[importPath] = imp.Package - } - - // Complete type information is required for the - // immediate dependencies of each source package. - if lpkg.needsrc && ld.Mode&NeedTypes != 0 { - for _, ipkg := range lpkg.Imports { - ld.pkgs[ipkg.ID].needtypes = true - } - } - - // NeedTypeSizes causes TypeSizes to be set even - // on packages for which types aren't needed. - if ld.Mode&NeedTypesSizes != 0 { - lpkg.TypesSizes = ld.sizes - } - stack = stack[:len(stack)-1] // pop - lpkg.color = black - - return lpkg.needsrc - } - - // For each initial package, create its import DAG. - for _, lpkg := range initial { - visit(lpkg) - } - - } else { - // !NeedImports: drop the stub (ID-only) import packages - // that we are not even going to try to resolve. - for _, lpkg := range initial { - lpkg.Imports = nil - } - } - - // Load type data and syntax if needed, starting at - // the initial packages (roots of the import DAG). - if ld.Mode&NeedTypes != 0 || ld.Mode&NeedSyntax != 0 { - var wg sync.WaitGroup - for _, lpkg := range initial { - wg.Add(1) - go func(lpkg *loaderPackage) { - ld.loadRecursive(lpkg) - wg.Done() - }(lpkg) - } - wg.Wait() - } - - result := make([]*Package, len(initial)) - for i, lpkg := range initial { - result[i] = lpkg.Package - } - for i := range ld.pkgs { - // Clear all unrequested fields, - // to catch programs that use more than they request. - if ld.requestedMode&NeedName == 0 { - ld.pkgs[i].Name = "" - ld.pkgs[i].PkgPath = "" - } - if ld.requestedMode&NeedFiles == 0 { - ld.pkgs[i].GoFiles = nil - ld.pkgs[i].OtherFiles = nil - ld.pkgs[i].IgnoredFiles = nil - } - if ld.requestedMode&NeedEmbedFiles == 0 { - ld.pkgs[i].EmbedFiles = nil - } - if ld.requestedMode&NeedEmbedPatterns == 0 { - ld.pkgs[i].EmbedPatterns = nil - } - if ld.requestedMode&NeedCompiledGoFiles == 0 { - ld.pkgs[i].CompiledGoFiles = nil - } - if ld.requestedMode&NeedImports == 0 { - ld.pkgs[i].Imports = nil - } - if ld.requestedMode&NeedExportFile == 0 { - ld.pkgs[i].ExportFile = "" - } - if ld.requestedMode&NeedTypes == 0 { - ld.pkgs[i].Types = nil - ld.pkgs[i].Fset = nil - ld.pkgs[i].IllTyped = false - } - if ld.requestedMode&NeedSyntax == 0 { - ld.pkgs[i].Syntax = nil - } - if ld.requestedMode&NeedTypesInfo == 0 { - ld.pkgs[i].TypesInfo = nil - } - if ld.requestedMode&NeedTypesSizes == 0 { - ld.pkgs[i].TypesSizes = nil - } - if ld.requestedMode&NeedModule == 0 { - ld.pkgs[i].Module = nil - } - } - - return result, nil -} - -// loadRecursive loads the specified package and its dependencies, -// recursively, in parallel, in topological order. -// It is atomic and idempotent. -// Precondition: ld.Mode&NeedTypes. -func (ld *loader) loadRecursive(lpkg *loaderPackage) { - lpkg.loadOnce.Do(func() { - // Load the direct dependencies, in parallel. - var wg sync.WaitGroup - for _, ipkg := range lpkg.Imports { - imp := ld.pkgs[ipkg.ID] - wg.Add(1) - go func(imp *loaderPackage) { - ld.loadRecursive(imp) - wg.Done() - }(imp) - } - wg.Wait() - ld.loadPackage(lpkg) - }) -} - -// loadPackage loads the specified package. -// It must be called only once per Package, -// after immediate dependencies are loaded. -// Precondition: ld.Mode & NeedTypes. -func (ld *loader) loadPackage(lpkg *loaderPackage) { - if lpkg.PkgPath == "unsafe" { - // Fill in the blanks to avoid surprises. - lpkg.Types = types.Unsafe - lpkg.Fset = ld.Fset - lpkg.Syntax = []*ast.File{} - lpkg.TypesInfo = new(types.Info) - lpkg.TypesSizes = ld.sizes - return - } - - // Call NewPackage directly with explicit name. - // This avoids skew between golist and go/types when the files' - // package declarations are inconsistent. - lpkg.Types = types.NewPackage(lpkg.PkgPath, lpkg.Name) - lpkg.Fset = ld.Fset - - // Subtle: we populate all Types fields with an empty Package - // before loading export data so that export data processing - // never has to create a types.Package for an indirect dependency, - // which would then require that such created packages be explicitly - // inserted back into the Import graph as a final step after export data loading. - // (Hence this return is after the Types assignment.) - // The Diamond test exercises this case. - if !lpkg.needtypes && !lpkg.needsrc { - return - } - if !lpkg.needsrc { - if err := ld.loadFromExportData(lpkg); err != nil { - lpkg.Errors = append(lpkg.Errors, Error{ - Pos: "-", - Msg: err.Error(), - Kind: UnknownError, // e.g. can't find/open/parse export data - }) - } - return // not a source package, don't get syntax trees - } - - appendError := func(err error) { - // Convert various error types into the one true Error. - var errs []Error - switch err := err.(type) { - case Error: - // from driver - errs = append(errs, err) - - case *os.PathError: - // from parser - errs = append(errs, Error{ - Pos: err.Path + ":1", - Msg: err.Err.Error(), - Kind: ParseError, - }) - - case scanner.ErrorList: - // from parser - for _, err := range err { - errs = append(errs, Error{ - Pos: err.Pos.String(), - Msg: err.Msg, - Kind: ParseError, - }) - } - - case types.Error: - // from type checker - lpkg.TypeErrors = append(lpkg.TypeErrors, err) - errs = append(errs, Error{ - Pos: err.Fset.Position(err.Pos).String(), - Msg: err.Msg, - Kind: TypeError, - }) - - default: - // unexpected impoverished error from parser? - errs = append(errs, Error{ - Pos: "-", - Msg: err.Error(), - Kind: UnknownError, - }) - - // If you see this error message, please file a bug. - log.Printf("internal error: error %q (%T) without position", err, err) - } - - lpkg.Errors = append(lpkg.Errors, errs...) - } - - // If the go command on the PATH is newer than the runtime, - // then the go/{scanner,ast,parser,types} packages from the - // standard library may be unable to process the files - // selected by go list. - // - // There is currently no way to downgrade the effective - // version of the go command (see issue 52078), so we proceed - // with the newer go command but, in case of parse or type - // errors, we emit an additional diagnostic. - // - // See: - // - golang.org/issue/52078 (flag to set release tags) - // - golang.org/issue/50825 (gopls legacy version support) - // - golang.org/issue/55883 (go/packages confusing error) - // - // Should we assert a hard minimum of (currently) go1.16 here? - var runtimeVersion int - if _, err := fmt.Sscanf(runtime.Version(), "go1.%d", &runtimeVersion); err == nil && runtimeVersion < lpkg.goVersion { - defer func() { - if len(lpkg.Errors) > 0 { - appendError(Error{ - Pos: "-", - Msg: fmt.Sprintf("This application uses version go1.%d of the source-processing packages but runs version go1.%d of 'go list'. It may fail to process source files that rely on newer language features. If so, rebuild the application using a newer version of Go.", runtimeVersion, lpkg.goVersion), - Kind: UnknownError, - }) - } - }() - } - - if ld.Config.Mode&NeedTypes != 0 && len(lpkg.CompiledGoFiles) == 0 && lpkg.ExportFile != "" { - // The config requested loading sources and types, but sources are missing. - // Add an error to the package and fall back to loading from export data. - appendError(Error{"-", fmt.Sprintf("sources missing for package %s", lpkg.ID), ParseError}) - _ = ld.loadFromExportData(lpkg) // ignore any secondary errors - - return // can't get syntax trees for this package - } - - files, errs := ld.parseFiles(lpkg.CompiledGoFiles) - for _, err := range errs { - appendError(err) - } - - lpkg.Syntax = files - if ld.Config.Mode&NeedTypes == 0 { - return - } - - lpkg.TypesInfo = &types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Defs: make(map[*ast.Ident]types.Object), - Uses: make(map[*ast.Ident]types.Object), - Implicits: make(map[ast.Node]types.Object), - Instances: make(map[*ast.Ident]types.Instance), - Scopes: make(map[ast.Node]*types.Scope), - Selections: make(map[*ast.SelectorExpr]*types.Selection), - } - versions.InitFileVersions(lpkg.TypesInfo) - lpkg.TypesSizes = ld.sizes - - importer := importerFunc(func(path string) (*types.Package, error) { - if path == "unsafe" { - return types.Unsafe, nil - } - - // The imports map is keyed by import path. - ipkg := lpkg.Imports[path] - if ipkg == nil { - if err := lpkg.importErrors[path]; err != nil { - return nil, err - } - // There was skew between the metadata and the - // import declarations, likely due to an edit - // race, or because the ParseFile feature was - // used to supply alternative file contents. - return nil, fmt.Errorf("no metadata for %s", path) - } - - if ipkg.Types != nil && ipkg.Types.Complete() { - return ipkg.Types, nil - } - log.Fatalf("internal error: package %q without types was imported from %q", path, lpkg) - panic("unreachable") - }) - - // type-check - tc := &types.Config{ - Importer: importer, - - // Type-check bodies of functions only in initial packages. - // Example: for import graph A->B->C and initial packages {A,C}, - // we can ignore function bodies in B. - IgnoreFuncBodies: ld.Mode&NeedDeps == 0 && !lpkg.initial, - - Error: appendError, - Sizes: ld.sizes, // may be nil - } - if lpkg.Module != nil && lpkg.Module.GoVersion != "" { - typesinternal.SetGoVersion(tc, "go"+lpkg.Module.GoVersion) - } - if (ld.Mode & typecheckCgo) != 0 { - if !typesinternal.SetUsesCgo(tc) { - appendError(Error{ - Msg: "typecheckCgo requires Go 1.15+", - Kind: ListError, - }) - return - } - } - types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax) - - lpkg.importErrors = nil // no longer needed - - // If !Cgo, the type-checker uses FakeImportC mode, so - // it doesn't invoke the importer for import "C", - // nor report an error for the import, - // or for any undefined C.f reference. - // We must detect this explicitly and correctly - // mark the package as IllTyped (by reporting an error). - // TODO(adonovan): if these errors are annoying, - // we could just set IllTyped quietly. - if tc.FakeImportC { - outer: - for _, f := range lpkg.Syntax { - for _, imp := range f.Imports { - if imp.Path.Value == `"C"` { - err := types.Error{Fset: ld.Fset, Pos: imp.Pos(), Msg: `import "C" ignored`} - appendError(err) - break outer - } - } - } - } - - // Record accumulated errors. - illTyped := len(lpkg.Errors) > 0 - if !illTyped { - for _, imp := range lpkg.Imports { - if imp.IllTyped { - illTyped = true - break - } - } - } - lpkg.IllTyped = illTyped -} - -// An importFunc is an implementation of the single-method -// types.Importer interface based on a function value. -type importerFunc func(path string) (*types.Package, error) - -func (f importerFunc) Import(path string) (*types.Package, error) { return f(path) } - -// We use a counting semaphore to limit -// the number of parallel I/O calls per process. -var ioLimit = make(chan bool, 20) - -func (ld *loader) parseFile(filename string) (*ast.File, error) { - ld.parseCacheMu.Lock() - v, ok := ld.parseCache[filename] - if ok { - // cache hit - ld.parseCacheMu.Unlock() - <-v.ready - } else { - // cache miss - v = &parseValue{ready: make(chan struct{})} - ld.parseCache[filename] = v - ld.parseCacheMu.Unlock() - - var src []byte - for f, contents := range ld.Config.Overlay { - if sameFile(f, filename) { - src = contents - } - } - var err error - if src == nil { - ioLimit <- true // wait - src, err = os.ReadFile(filename) - <-ioLimit // signal - } - if err != nil { - v.err = err - } else { - v.f, v.err = ld.ParseFile(ld.Fset, filename, src) - } - - close(v.ready) - } - return v.f, v.err -} - -// parseFiles reads and parses the Go source files and returns the ASTs -// of the ones that could be at least partially parsed, along with a -// list of I/O and parse errors encountered. -// -// Because files are scanned in parallel, the token.Pos -// positions of the resulting ast.Files are not ordered. -func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) { - var wg sync.WaitGroup - n := len(filenames) - parsed := make([]*ast.File, n) - errors := make([]error, n) - for i, file := range filenames { - if ld.Config.Context.Err() != nil { - parsed[i] = nil - errors[i] = ld.Config.Context.Err() - continue - } - wg.Add(1) - go func(i int, filename string) { - parsed[i], errors[i] = ld.parseFile(filename) - wg.Done() - }(i, file) - } - wg.Wait() - - // Eliminate nils, preserving order. - var o int - for _, f := range parsed { - if f != nil { - parsed[o] = f - o++ - } - } - parsed = parsed[:o] - - o = 0 - for _, err := range errors { - if err != nil { - errors[o] = err - o++ - } - } - errors = errors[:o] - - return parsed, errors -} - -// sameFile returns true if x and y have the same basename and denote -// the same file. -func sameFile(x, y string) bool { - if x == y { - // It could be the case that y doesn't exist. - // For instance, it may be an overlay file that - // hasn't been written to disk. To handle that case - // let x == y through. (We added the exact absolute path - // string to the CompiledGoFiles list, so the unwritten - // overlay case implies x==y.) - return true - } - if strings.EqualFold(filepath.Base(x), filepath.Base(y)) { // (optimisation) - if xi, err := os.Stat(x); err == nil { - if yi, err := os.Stat(y); err == nil { - return os.SameFile(xi, yi) - } - } - } - return false -} - -// loadFromExportData ensures that type information is present for the specified -// package, loading it from an export data file on the first request. -// On success it sets lpkg.Types to a new Package. -func (ld *loader) loadFromExportData(lpkg *loaderPackage) error { - if lpkg.PkgPath == "" { - log.Fatalf("internal error: Package %s has no PkgPath", lpkg) - } - - // Because gcexportdata.Read has the potential to create or - // modify the types.Package for each node in the transitive - // closure of dependencies of lpkg, all exportdata operations - // must be sequential. (Finer-grained locking would require - // changes to the gcexportdata API.) - // - // The exportMu lock guards the lpkg.Types field and the - // types.Package it points to, for each loaderPackage in the graph. - // - // Not all accesses to Package.Pkg need to be protected by exportMu: - // graph ordering ensures that direct dependencies of source - // packages are fully loaded before the importer reads their Pkg field. - ld.exportMu.Lock() - defer ld.exportMu.Unlock() - - if tpkg := lpkg.Types; tpkg != nil && tpkg.Complete() { - return nil // cache hit - } - - lpkg.IllTyped = true // fail safe - - if lpkg.ExportFile == "" { - // Errors while building export data will have been printed to stderr. - return fmt.Errorf("no export data file") - } - f, err := os.Open(lpkg.ExportFile) - if err != nil { - return err - } - defer f.Close() - - // Read gc export data. - // - // We don't currently support gccgo export data because all - // underlying workspaces use the gc toolchain. (Even build - // systems that support gccgo don't use it for workspace - // queries.) - r, err := gcexportdata.NewReader(f) - if err != nil { - return fmt.Errorf("reading %s: %v", lpkg.ExportFile, err) - } - - // Build the view. - // - // The gcexportdata machinery has no concept of package ID. - // It identifies packages by their PkgPath, which although not - // globally unique is unique within the scope of one invocation - // of the linker, type-checker, or gcexportdata. - // - // So, we must build a PkgPath-keyed view of the global - // (conceptually ID-keyed) cache of packages and pass it to - // gcexportdata. The view must contain every existing - // package that might possibly be mentioned by the - // current package---its transitive closure. - // - // In loadPackage, we unconditionally create a types.Package for - // each dependency so that export data loading does not - // create new ones. - // - // TODO(adonovan): it would be simpler and more efficient - // if the export data machinery invoked a callback to - // get-or-create a package instead of a map. - // - view := make(map[string]*types.Package) // view seen by gcexportdata - seen := make(map[*loaderPackage]bool) // all visited packages - var visit func(pkgs map[string]*Package) - visit = func(pkgs map[string]*Package) { - for _, p := range pkgs { - lpkg := ld.pkgs[p.ID] - if !seen[lpkg] { - seen[lpkg] = true - view[lpkg.PkgPath] = lpkg.Types - visit(lpkg.Imports) - } - } - } - visit(lpkg.Imports) - - viewLen := len(view) + 1 // adding the self package - // Parse the export data. - // (May modify incomplete packages in view but not create new ones.) - tpkg, err := gcexportdata.Read(r, ld.Fset, view, lpkg.PkgPath) - if err != nil { - return fmt.Errorf("reading %s: %v", lpkg.ExportFile, err) - } - if _, ok := view["go.shape"]; ok { - // Account for the pseudopackage "go.shape" that gets - // created by generic code. - viewLen++ - } - if viewLen != len(view) { - log.Panicf("golang.org/x/tools/go/packages: unexpected new packages during load of %s", lpkg.PkgPath) - } - - lpkg.Types = tpkg - lpkg.IllTyped = false - return nil -} - -// impliedLoadMode returns loadMode with its dependencies. -func impliedLoadMode(loadMode LoadMode) LoadMode { - if loadMode&(NeedDeps|NeedTypes|NeedTypesInfo) != 0 { - // All these things require knowing the import graph. - loadMode |= NeedImports - } - - return loadMode -} - -func usesExportData(cfg *Config) bool { - return cfg.Mode&NeedExportFile != 0 || cfg.Mode&NeedTypes != 0 && cfg.Mode&NeedDeps == 0 -} - -var _ interface{} = io.Discard // assert build toolchain is go1.16 or later diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/visit.go b/go/extractor/vendor/golang.org/x/tools/go/packages/visit.go deleted file mode 100644 index a1dcc40b7270..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/visit.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packages - -import ( - "fmt" - "os" - "sort" -) - -// Visit visits all the packages in the import graph whose roots are -// pkgs, calling the optional pre function the first time each package -// is encountered (preorder), and the optional post function after a -// package's dependencies have been visited (postorder). -// The boolean result of pre(pkg) determines whether -// the imports of package pkg are visited. -func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) { - seen := make(map[*Package]bool) - var visit func(*Package) - visit = func(pkg *Package) { - if !seen[pkg] { - seen[pkg] = true - - if pre == nil || pre(pkg) { - paths := make([]string, 0, len(pkg.Imports)) - for path := range pkg.Imports { - paths = append(paths, path) - } - sort.Strings(paths) // Imports is a map, this makes visit stable - for _, path := range paths { - visit(pkg.Imports[path]) - } - } - - if post != nil { - post(pkg) - } - } - } - for _, pkg := range pkgs { - visit(pkg) - } -} - -// PrintErrors prints to os.Stderr the accumulated errors of all -// packages in the import graph rooted at pkgs, dependencies first. -// PrintErrors returns the number of errors printed. -func PrintErrors(pkgs []*Package) int { - var n int - Visit(pkgs, nil, func(pkg *Package) { - for _, err := range pkg.Errors { - fmt.Fprintln(os.Stderr, err) - n++ - } - }) - return n -} diff --git a/go/extractor/vendor/golang.org/x/tools/go/types/objectpath/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/go/types/objectpath/BUILD.bazel deleted file mode 100644 index 374c5c601bc8..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/types/objectpath/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "objectpath", - srcs = ["objectpath.go"], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/go/types/objectpath", - importpath = "golang.org/x/tools/go/types/objectpath", - visibility = ["//visibility:public"], - deps = ["//go/extractor/vendor/golang.org/x/tools/internal/typeparams"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/go/extractor/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go deleted file mode 100644 index 11d5c8c3adf1..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ /dev/null @@ -1,752 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package objectpath defines a naming scheme for types.Objects -// (that is, named entities in Go programs) relative to their enclosing -// package. -// -// Type-checker objects are canonical, so they are usually identified by -// their address in memory (a pointer), but a pointer has meaning only -// within one address space. By contrast, objectpath names allow the -// identity of an object to be sent from one program to another, -// establishing a correspondence between types.Object variables that are -// distinct but logically equivalent. -// -// A single object may have multiple paths. In this example, -// -// type A struct{ X int } -// type B A -// -// the field X has two paths due to its membership of both A and B. -// The For(obj) function always returns one of these paths, arbitrarily -// but consistently. -package objectpath - -import ( - "fmt" - "go/types" - "strconv" - "strings" - - "golang.org/x/tools/internal/typeparams" -) - -// A Path is an opaque name that identifies a types.Object -// relative to its package. Conceptually, the name consists of a -// sequence of destructuring operations applied to the package scope -// to obtain the original object. -// The name does not include the package itself. -type Path string - -// Encoding -// -// An object path is a textual and (with training) human-readable encoding -// of a sequence of destructuring operators, starting from a types.Package. -// The sequences represent a path through the package/object/type graph. -// We classify these operators by their type: -// -// PO package->object Package.Scope.Lookup -// OT object->type Object.Type -// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] -// TO type->object Type.{At,Field,Method,Obj} [AFMO] -// -// All valid paths start with a package and end at an object -// and thus may be defined by the regular language: -// -// objectpath = PO (OT TT* TO)* -// -// The concrete encoding follows directly: -// - The only PO operator is Package.Scope.Lookup, which requires an identifier. -// - The only OT operator is Object.Type, -// which we encode as '.' because dot cannot appear in an identifier. -// - The TT operators are encoded as [EKPRUTC]; -// one of these (TypeParam) requires an integer operand, -// which is encoded as a string of decimal digits. -// - The TO operators are encoded as [AFMO]; -// three of these (At,Field,Method) require an integer operand, -// which is encoded as a string of decimal digits. -// These indices are stable across different representations -// of the same package, even source and export data. -// The indices used are implementation specific and may not correspond to -// the argument to the go/types function. -// -// In the example below, -// -// package p -// -// type T interface { -// f() (a string, b struct{ X int }) -// } -// -// field X has the path "T.UM0.RA1.F0", -// representing the following sequence of operations: -// -// p.Lookup("T") T -// .Type().Underlying().Method(0). f -// .Type().Results().At(1) b -// .Type().Field(0) X -// -// The encoding is not maximally compact---every R or P is -// followed by an A, for example---but this simplifies the -// encoder and decoder. -const ( - // object->type operators - opType = '.' // .Type() (Object) - - // type->type operators - opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) - opKey = 'K' // .Key() (Map) - opParams = 'P' // .Params() (Signature) - opResults = 'R' // .Results() (Signature) - opUnderlying = 'U' // .Underlying() (Named) - opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) - opConstraint = 'C' // .Constraint() (TypeParam) - - // type->object operators - opAt = 'A' // .At(i) (Tuple) - opField = 'F' // .Field(i) (Struct) - opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) - opObj = 'O' // .Obj() (Named, TypeParam) -) - -// For is equivalent to new(Encoder).For(obj). -// -// It may be more efficient to reuse a single Encoder across several calls. -func For(obj types.Object) (Path, error) { - return new(Encoder).For(obj) -} - -// An Encoder amortizes the cost of encoding the paths of multiple objects. -// The zero value of an Encoder is ready to use. -type Encoder struct { - scopeMemo map[*types.Scope][]types.Object // memoization of scopeObjects -} - -// For returns the path to an object relative to its package, -// or an error if the object is not accessible from the package's Scope. -// -// The For function guarantees to return a path only for the following objects: -// - package-level types -// - exported package-level non-types -// - methods -// - parameter and result variables -// - struct fields -// These objects are sufficient to define the API of their package. -// The objects described by a package's export data are drawn from this set. -// -// The set of objects accessible from a package's Scope depends on -// whether the package was produced by type-checking syntax, or -// reading export data; the latter may have a smaller Scope since -// export data trims objects that are not reachable from an exported -// declaration. For example, the For function will return a path for -// an exported method of an unexported type that is not reachable -// from any public declaration; this path will cause the Object -// function to fail if called on a package loaded from export data. -// TODO(adonovan): is this a bug or feature? Should this package -// compute accessibility in the same way? -// -// For does not return a path for predeclared names, imported package -// names, local names, and unexported package-level names (except -// types). -// -// Example: given this definition, -// -// package p -// -// type T interface { -// f() (a string, b struct{ X int }) -// } -// -// For(X) would return a path that denotes the following sequence of operations: -// -// p.Scope().Lookup("T") (TypeName T) -// .Type().Underlying().Method(0). (method Func f) -// .Type().Results().At(1) (field Var b) -// .Type().Field(0) (field Var X) -// -// where p is the package (*types.Package) to which X belongs. -func (enc *Encoder) For(obj types.Object) (Path, error) { - pkg := obj.Pkg() - - // This table lists the cases of interest. - // - // Object Action - // ------ ------ - // nil reject - // builtin reject - // pkgname reject - // label reject - // var - // package-level accept - // func param/result accept - // local reject - // struct field accept - // const - // package-level accept - // local reject - // func - // package-level accept - // init functions reject - // concrete method accept - // interface method accept - // type - // package-level accept - // local reject - // - // The only accessible package-level objects are members of pkg itself. - // - // The cases are handled in four steps: - // - // 1. reject nil and builtin - // 2. accept package-level objects - // 3. reject obviously invalid objects - // 4. search the API for the path to the param/result/field/method. - - // 1. reference to nil or builtin? - if pkg == nil { - return "", fmt.Errorf("predeclared %s has no path", obj) - } - scope := pkg.Scope() - - // 2. package-level object? - if scope.Lookup(obj.Name()) == obj { - // Only exported objects (and non-exported types) have a path. - // Non-exported types may be referenced by other objects. - if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() { - return "", fmt.Errorf("no path for non-exported %v", obj) - } - return Path(obj.Name()), nil - } - - // 3. Not a package-level object. - // Reject obviously non-viable cases. - switch obj := obj.(type) { - case *types.TypeName: - if _, ok := obj.Type().(*types.TypeParam); !ok { - // With the exception of type parameters, only package-level type names - // have a path. - return "", fmt.Errorf("no path for %v", obj) - } - case *types.Const, // Only package-level constants have a path. - *types.Label, // Labels are function-local. - *types.PkgName: // PkgNames are file-local. - return "", fmt.Errorf("no path for %v", obj) - - case *types.Var: - // Could be: - // - a field (obj.IsField()) - // - a func parameter or result - // - a local var. - // Sadly there is no way to distinguish - // a param/result from a local - // so we must proceed to the find. - - case *types.Func: - // A func, if not package-level, must be a method. - if recv := obj.Type().(*types.Signature).Recv(); recv == nil { - return "", fmt.Errorf("func is not a method: %v", obj) - } - - if path, ok := enc.concreteMethod(obj); ok { - // Fast path for concrete methods that avoids looping over scope. - return path, nil - } - - default: - panic(obj) - } - - // 4. Search the API for the path to the var (field/param/result) or method. - - // First inspect package-level named types. - // In the presence of path aliases, these give - // the best paths because non-types may - // refer to types, but not the reverse. - empty := make([]byte, 0, 48) // initial space - objs := enc.scopeObjects(scope) - for _, o := range objs { - tname, ok := o.(*types.TypeName) - if !ok { - continue // handle non-types in second pass - } - - path := append(empty, o.Name()...) - path = append(path, opType) - - T := o.Type() - - if tname.IsAlias() { - // type alias - if r := find(obj, T, path, nil); r != nil { - return Path(r), nil - } - } else { - if named, _ := T.(*types.Named); named != nil { - if r := findTypeParam(obj, named.TypeParams(), path, nil); r != nil { - // generic named type - return Path(r), nil - } - } - // defined (named) type - if r := find(obj, T.Underlying(), append(path, opUnderlying), nil); r != nil { - return Path(r), nil - } - } - } - - // Then inspect everything else: - // non-types, and declared methods of defined types. - for _, o := range objs { - path := append(empty, o.Name()...) - if _, ok := o.(*types.TypeName); !ok { - if o.Exported() { - // exported non-type (const, var, func) - if r := find(obj, o.Type(), append(path, opType), nil); r != nil { - return Path(r), nil - } - } - continue - } - - // Inspect declared methods of defined types. - if T, ok := o.Type().(*types.Named); ok { - path = append(path, opType) - // The method index here is always with respect - // to the underlying go/types data structures, - // which ultimately derives from source order - // and must be preserved by export data. - for i := 0; i < T.NumMethods(); i++ { - m := T.Method(i) - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return Path(path2), nil // found declared method - } - if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { - return Path(r), nil - } - } - } - } - - return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path()) -} - -func appendOpArg(path []byte, op byte, arg int) []byte { - path = append(path, op) - path = strconv.AppendInt(path, int64(arg), 10) - return path -} - -// concreteMethod returns the path for meth, which must have a non-nil receiver. -// The second return value indicates success and may be false if the method is -// an interface method or if it is an instantiated method. -// -// This function is just an optimization that avoids the general scope walking -// approach. You are expected to fall back to the general approach if this -// function fails. -func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { - // Concrete methods can only be declared on package-scoped named types. For - // that reason we can skip the expensive walk over the package scope: the - // path will always be package -> named type -> method. We can trivially get - // the type name from the receiver, and only have to look over the type's - // methods to find the method index. - // - // Methods on generic types require special consideration, however. Consider - // the following package: - // - // L1: type S[T any] struct{} - // L2: func (recv S[A]) Foo() { recv.Bar() } - // L3: func (recv S[B]) Bar() { } - // L4: type Alias = S[int] - // L5: func _[T any]() { var s S[int]; s.Foo() } - // - // The receivers of methods on generic types are instantiations. L2 and L3 - // instantiate S with the type-parameters A and B, which are scoped to the - // respective methods. L4 and L5 each instantiate S with int. Each of these - // instantiations has its own method set, full of methods (and thus objects) - // with receivers whose types are the respective instantiations. In other - // words, we have - // - // S[A].Foo, S[A].Bar - // S[B].Foo, S[B].Bar - // S[int].Foo, S[int].Bar - // - // We may thus be trying to produce object paths for any of these objects. - // - // S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo - // and S.Bar, which are the paths that this function naturally produces. - // - // S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that - // don't correspond to the origin methods. For S[int], this is significant. - // The most precise object path for S[int].Foo, for example, is Alias.Foo, - // not S.Foo. Our function, however, would produce S.Foo, which would - // resolve to a different object. - // - // For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are - // still the correct paths, since only the origin methods have meaningful - // paths. But this is likely only true for trivial cases and has edge cases. - // Since this function is only an optimization, we err on the side of giving - // up, deferring to the slower but definitely correct algorithm. Most users - // of objectpath will only be giving us origin methods, anyway, as referring - // to instantiated methods is usually not useful. - - if typeparams.OriginMethod(meth) != meth { - return "", false - } - - recvT := meth.Type().(*types.Signature).Recv().Type() - if ptr, ok := recvT.(*types.Pointer); ok { - recvT = ptr.Elem() - } - - named, ok := recvT.(*types.Named) - if !ok { - return "", false - } - - if types.IsInterface(named) { - // Named interfaces don't have to be package-scoped - // - // TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface - // methods, too, I think. - return "", false - } - - // Preallocate space for the name, opType, opMethod, and some digits. - name := named.Obj().Name() - path := make([]byte, 0, len(name)+8) - path = append(path, name...) - path = append(path, opType) - - // Method indices are w.r.t. the go/types data structures, - // ultimately deriving from source order, - // which is preserved by export data. - for i := 0; i < named.NumMethods(); i++ { - if named.Method(i) == meth { - path = appendOpArg(path, opMethod, i) - return Path(path), true - } - } - - // Due to golang/go#59944, go/types fails to associate the receiver with - // certain methods on cgo types. - // - // TODO(rfindley): replace this panic once golang/go#59944 is fixed in all Go - // versions gopls supports. - return "", false - // panic(fmt.Sprintf("couldn't find method %s on type %s; methods: %#v", meth, named, enc.namedMethods(named))) -} - -// find finds obj within type T, returning the path to it, or nil if not found. -// -// The seen map is used to short circuit cycles through type parameters. If -// nil, it will be allocated as necessary. -func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte { - switch T := T.(type) { - case *types.Basic, *types.Named: - // Named types belonging to pkg were handled already, - // so T must belong to another package. No path. - return nil - case *types.Pointer: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Slice: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Array: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Chan: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Map: - if r := find(obj, T.Key(), append(path, opKey), seen); r != nil { - return r - } - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Signature: - if r := findTypeParam(obj, T.TypeParams(), path, seen); r != nil { - return r - } - if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { - return r - } - return find(obj, T.Results(), append(path, opResults), seen) - case *types.Struct: - for i := 0; i < T.NumFields(); i++ { - fld := T.Field(i) - path2 := appendOpArg(path, opField, i) - if fld == obj { - return path2 // found field var - } - if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *types.Tuple: - for i := 0; i < T.Len(); i++ { - v := T.At(i) - path2 := appendOpArg(path, opAt, i) - if v == obj { - return path2 // found param/result var - } - if r := find(obj, v.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *types.Interface: - for i := 0; i < T.NumMethods(); i++ { - m := T.Method(i) - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return path2 // found interface method - } - if r := find(obj, m.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *types.TypeParam: - name := T.Obj() - if name == obj { - return append(path, opObj) - } - if seen[name] { - return nil - } - if seen == nil { - seen = make(map[*types.TypeName]bool) - } - seen[name] = true - if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil { - return r - } - return nil - } - panic(T) -} - -func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { - for i := 0; i < list.Len(); i++ { - tparam := list.At(i) - path2 := appendOpArg(path, opTypeParam, i) - if r := find(obj, tparam, path2, seen); r != nil { - return r - } - } - return nil -} - -// Object returns the object denoted by path p within the package pkg. -func Object(pkg *types.Package, p Path) (types.Object, error) { - pathstr := string(p) - if pathstr == "" { - return nil, fmt.Errorf("empty path") - } - - var pkgobj, suffix string - if dot := strings.IndexByte(pathstr, opType); dot < 0 { - pkgobj = pathstr - } else { - pkgobj = pathstr[:dot] - suffix = pathstr[dot:] // suffix starts with "." - } - - obj := pkg.Scope().Lookup(pkgobj) - if obj == nil { - return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj) - } - - // abstraction of *types.{Pointer,Slice,Array,Chan,Map} - type hasElem interface { - Elem() types.Type - } - // abstraction of *types.{Named,Signature} - type hasTypeParams interface { - TypeParams() *types.TypeParamList - } - // abstraction of *types.{Named,TypeParam} - type hasObj interface { - Obj() *types.TypeName - } - - // The loop state is the pair (t, obj), - // exactly one of which is non-nil, initially obj. - // All suffixes start with '.' (the only object->type operation), - // followed by optional type->type operations, - // then a type->object operation. - // The cycle then repeats. - var t types.Type - for suffix != "" { - code := suffix[0] - suffix = suffix[1:] - - // Codes [AFM] have an integer operand. - var index int - switch code { - case opAt, opField, opMethod, opTypeParam: - rest := strings.TrimLeft(suffix, "0123456789") - numerals := suffix[:len(suffix)-len(rest)] - suffix = rest - i, err := strconv.Atoi(numerals) - if err != nil { - return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code) - } - index = int(i) - case opObj: - // no operand - default: - // The suffix must end with a type->object operation. - if suffix == "" { - return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code) - } - } - - if code == opType { - if t != nil { - return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType) - } - t = obj.Type() - obj = nil - continue - } - - if t == nil { - return nil, fmt.Errorf("invalid path: code %q in object context", code) - } - - // Inv: t != nil, obj == nil - - switch code { - case opElem: - hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t) - } - t = hasElem.Elem() - - case opKey: - mapType, ok := t.(*types.Map) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t) - } - t = mapType.Key() - - case opParams: - sig, ok := t.(*types.Signature) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) - } - t = sig.Params() - - case opResults: - sig, ok := t.(*types.Signature) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) - } - t = sig.Results() - - case opUnderlying: - named, ok := t.(*types.Named) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t) - } - t = named.Underlying() - - case opTypeParam: - hasTypeParams, ok := t.(hasTypeParams) // Named, Signature - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t) - } - tparams := hasTypeParams.TypeParams() - if n := tparams.Len(); index >= n { - return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) - } - t = tparams.At(index) - - case opConstraint: - tparam, ok := t.(*types.TypeParam) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t) - } - t = tparam.Constraint() - - case opAt: - tuple, ok := t.(*types.Tuple) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t) - } - if n := tuple.Len(); index >= n { - return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) - } - obj = tuple.At(index) - t = nil - - case opField: - structType, ok := t.(*types.Struct) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t) - } - if n := structType.NumFields(); index >= n { - return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n) - } - obj = structType.Field(index) - t = nil - - case opMethod: - switch t := t.(type) { - case *types.Interface: - if index >= t.NumMethods() { - return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) - } - obj = t.Method(index) // Id-ordered - - case *types.Named: - if index >= t.NumMethods() { - return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) - } - obj = t.Method(index) - - default: - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t) - } - t = nil - - case opObj: - hasObj, ok := t.(hasObj) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t) - } - obj = hasObj.Obj() - t = nil - - default: - return nil, fmt.Errorf("invalid path: unknown code %q", code) - } - } - - if obj.Pkg() != pkg { - return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) - } - - return obj, nil // success -} - -// scopeObjects is a memoization of scope objects. -// Callers must not modify the result. -func (enc *Encoder) scopeObjects(scope *types.Scope) []types.Object { - m := enc.scopeMemo - if m == nil { - m = make(map[*types.Scope][]types.Object) - enc.scopeMemo = m - } - objs, ok := m[scope] - if !ok { - names := scope.Names() // allocates and sorts - objs = make([]types.Object, len(names)) - for i, name := range names { - objs[i] = scope.Lookup(name) - } - m[scope] = objs - } - return objs -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/event/BUILD.bazel deleted file mode 100644 index 200e436fcd4b..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/BUILD.bazel +++ /dev/null @@ -1,19 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "event", - srcs = [ - "doc.go", - "event.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/event", - importpath = "golang.org/x/tools/internal/event", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], - deps = [ - "//go/extractor/vendor/golang.org/x/tools/internal/event/core", - "//go/extractor/vendor/golang.org/x/tools/internal/event/keys", - "//go/extractor/vendor/golang.org/x/tools/internal/event/label", - ], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/core/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/event/core/BUILD.bazel deleted file mode 100644 index a16713f536ce..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/core/BUILD.bazel +++ /dev/null @@ -1,19 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "core", - srcs = [ - "event.go", - "export.go", - "fast.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/event/core", - importpath = "golang.org/x/tools/internal/event/core", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], - deps = [ - "//go/extractor/vendor/golang.org/x/tools/internal/event/keys", - "//go/extractor/vendor/golang.org/x/tools/internal/event/label", - ], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/core/event.go b/go/extractor/vendor/golang.org/x/tools/internal/event/core/event.go deleted file mode 100644 index a6cf0e64a4b1..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/core/event.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package core provides support for event based telemetry. -package core - -import ( - "fmt" - "time" - - "golang.org/x/tools/internal/event/label" -) - -// Event holds the information about an event of note that occurred. -type Event struct { - at time.Time - - // As events are often on the stack, storing the first few labels directly - // in the event can avoid an allocation at all for the very common cases of - // simple events. - // The length needs to be large enough to cope with the majority of events - // but no so large as to cause undue stack pressure. - // A log message with two values will use 3 labels (one for each value and - // one for the message itself). - - static [3]label.Label // inline storage for the first few labels - dynamic []label.Label // dynamically sized storage for remaining labels -} - -// eventLabelMap implements label.Map for a the labels of an Event. -type eventLabelMap struct { - event Event -} - -func (ev Event) At() time.Time { return ev.at } - -func (ev Event) Format(f fmt.State, r rune) { - if !ev.at.IsZero() { - fmt.Fprint(f, ev.at.Format("2006/01/02 15:04:05 ")) - } - for index := 0; ev.Valid(index); index++ { - if l := ev.Label(index); l.Valid() { - fmt.Fprintf(f, "\n\t%v", l) - } - } -} - -func (ev Event) Valid(index int) bool { - return index >= 0 && index < len(ev.static)+len(ev.dynamic) -} - -func (ev Event) Label(index int) label.Label { - if index < len(ev.static) { - return ev.static[index] - } - return ev.dynamic[index-len(ev.static)] -} - -func (ev Event) Find(key label.Key) label.Label { - for _, l := range ev.static { - if l.Key() == key { - return l - } - } - for _, l := range ev.dynamic { - if l.Key() == key { - return l - } - } - return label.Label{} -} - -func MakeEvent(static [3]label.Label, labels []label.Label) Event { - return Event{ - static: static, - dynamic: labels, - } -} - -// CloneEvent event returns a copy of the event with the time adjusted to at. -func CloneEvent(ev Event, at time.Time) Event { - ev.at = at - return ev -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/core/export.go b/go/extractor/vendor/golang.org/x/tools/internal/event/core/export.go deleted file mode 100644 index 05f3a9a5791a..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/core/export.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package core - -import ( - "context" - "sync/atomic" - "time" - "unsafe" - - "golang.org/x/tools/internal/event/label" -) - -// Exporter is a function that handles events. -// It may return a modified context and event. -type Exporter func(context.Context, Event, label.Map) context.Context - -var ( - exporter unsafe.Pointer -) - -// SetExporter sets the global exporter function that handles all events. -// The exporter is called synchronously from the event call site, so it should -// return quickly so as not to hold up user code. -func SetExporter(e Exporter) { - p := unsafe.Pointer(&e) - if e == nil { - // &e is always valid, and so p is always valid, but for the early abort - // of ProcessEvent to be efficient it needs to make the nil check on the - // pointer without having to dereference it, so we make the nil function - // also a nil pointer - p = nil - } - atomic.StorePointer(&exporter, p) -} - -// deliver is called to deliver an event to the supplied exporter. -// it will fill in the time. -func deliver(ctx context.Context, exporter Exporter, ev Event) context.Context { - // add the current time to the event - ev.at = time.Now() - // hand the event off to the current exporter - return exporter(ctx, ev, ev) -} - -// Export is called to deliver an event to the global exporter if set. -func Export(ctx context.Context, ev Event) context.Context { - // get the global exporter and abort early if there is not one - exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter)) - if exporterPtr == nil { - return ctx - } - return deliver(ctx, *exporterPtr, ev) -} - -// ExportPair is called to deliver a start event to the supplied exporter. -// It also returns a function that will deliver the end event to the same -// exporter. -// It will fill in the time. -func ExportPair(ctx context.Context, begin, end Event) (context.Context, func()) { - // get the global exporter and abort early if there is not one - exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter)) - if exporterPtr == nil { - return ctx, func() {} - } - ctx = deliver(ctx, *exporterPtr, begin) - return ctx, func() { deliver(ctx, *exporterPtr, end) } -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/core/fast.go b/go/extractor/vendor/golang.org/x/tools/internal/event/core/fast.go deleted file mode 100644 index 06c1d4615e6b..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/core/fast.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package core - -import ( - "context" - - "golang.org/x/tools/internal/event/keys" - "golang.org/x/tools/internal/event/label" -) - -// Log1 takes a message and one label delivers a log event to the exporter. -// It is a customized version of Print that is faster and does no allocation. -func Log1(ctx context.Context, message string, t1 label.Label) { - Export(ctx, MakeEvent([3]label.Label{ - keys.Msg.Of(message), - t1, - }, nil)) -} - -// Log2 takes a message and two labels and delivers a log event to the exporter. -// It is a customized version of Print that is faster and does no allocation. -func Log2(ctx context.Context, message string, t1 label.Label, t2 label.Label) { - Export(ctx, MakeEvent([3]label.Label{ - keys.Msg.Of(message), - t1, - t2, - }, nil)) -} - -// Metric1 sends a label event to the exporter with the supplied labels. -func Metric1(ctx context.Context, t1 label.Label) context.Context { - return Export(ctx, MakeEvent([3]label.Label{ - keys.Metric.New(), - t1, - }, nil)) -} - -// Metric2 sends a label event to the exporter with the supplied labels. -func Metric2(ctx context.Context, t1, t2 label.Label) context.Context { - return Export(ctx, MakeEvent([3]label.Label{ - keys.Metric.New(), - t1, - t2, - }, nil)) -} - -// Start1 sends a span start event with the supplied label list to the exporter. -// It also returns a function that will end the span, which should normally be -// deferred. -func Start1(ctx context.Context, name string, t1 label.Label) (context.Context, func()) { - return ExportPair(ctx, - MakeEvent([3]label.Label{ - keys.Start.Of(name), - t1, - }, nil), - MakeEvent([3]label.Label{ - keys.End.New(), - }, nil)) -} - -// Start2 sends a span start event with the supplied label list to the exporter. -// It also returns a function that will end the span, which should normally be -// deferred. -func Start2(ctx context.Context, name string, t1, t2 label.Label) (context.Context, func()) { - return ExportPair(ctx, - MakeEvent([3]label.Label{ - keys.Start.Of(name), - t1, - t2, - }, nil), - MakeEvent([3]label.Label{ - keys.End.New(), - }, nil)) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/doc.go b/go/extractor/vendor/golang.org/x/tools/internal/event/doc.go deleted file mode 100644 index 5dc6e6babedd..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package event provides a set of packages that cover the main -// concepts of telemetry in an implementation agnostic way. -package event diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/event.go b/go/extractor/vendor/golang.org/x/tools/internal/event/event.go deleted file mode 100644 index 4d55e577d1a8..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/event.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package event - -import ( - "context" - - "golang.org/x/tools/internal/event/core" - "golang.org/x/tools/internal/event/keys" - "golang.org/x/tools/internal/event/label" -) - -// Exporter is a function that handles events. -// It may return a modified context and event. -type Exporter func(context.Context, core.Event, label.Map) context.Context - -// SetExporter sets the global exporter function that handles all events. -// The exporter is called synchronously from the event call site, so it should -// return quickly so as not to hold up user code. -func SetExporter(e Exporter) { - core.SetExporter(core.Exporter(e)) -} - -// Log takes a message and a label list and combines them into a single event -// before delivering them to the exporter. -func Log(ctx context.Context, message string, labels ...label.Label) { - core.Export(ctx, core.MakeEvent([3]label.Label{ - keys.Msg.Of(message), - }, labels)) -} - -// IsLog returns true if the event was built by the Log function. -// It is intended to be used in exporters to identify the semantics of the -// event when deciding what to do with it. -func IsLog(ev core.Event) bool { - return ev.Label(0).Key() == keys.Msg -} - -// Error takes a message and a label list and combines them into a single event -// before delivering them to the exporter. It captures the error in the -// delivered event. -func Error(ctx context.Context, message string, err error, labels ...label.Label) { - core.Export(ctx, core.MakeEvent([3]label.Label{ - keys.Msg.Of(message), - keys.Err.Of(err), - }, labels)) -} - -// IsError returns true if the event was built by the Error function. -// It is intended to be used in exporters to identify the semantics of the -// event when deciding what to do with it. -func IsError(ev core.Event) bool { - return ev.Label(0).Key() == keys.Msg && - ev.Label(1).Key() == keys.Err -} - -// Metric sends a label event to the exporter with the supplied labels. -func Metric(ctx context.Context, labels ...label.Label) { - core.Export(ctx, core.MakeEvent([3]label.Label{ - keys.Metric.New(), - }, labels)) -} - -// IsMetric returns true if the event was built by the Metric function. -// It is intended to be used in exporters to identify the semantics of the -// event when deciding what to do with it. -func IsMetric(ev core.Event) bool { - return ev.Label(0).Key() == keys.Metric -} - -// Label sends a label event to the exporter with the supplied labels. -func Label(ctx context.Context, labels ...label.Label) context.Context { - return core.Export(ctx, core.MakeEvent([3]label.Label{ - keys.Label.New(), - }, labels)) -} - -// IsLabel returns true if the event was built by the Label function. -// It is intended to be used in exporters to identify the semantics of the -// event when deciding what to do with it. -func IsLabel(ev core.Event) bool { - return ev.Label(0).Key() == keys.Label -} - -// Start sends a span start event with the supplied label list to the exporter. -// It also returns a function that will end the span, which should normally be -// deferred. -func Start(ctx context.Context, name string, labels ...label.Label) (context.Context, func()) { - return core.ExportPair(ctx, - core.MakeEvent([3]label.Label{ - keys.Start.Of(name), - }, labels), - core.MakeEvent([3]label.Label{ - keys.End.New(), - }, nil)) -} - -// IsStart returns true if the event was built by the Start function. -// It is intended to be used in exporters to identify the semantics of the -// event when deciding what to do with it. -func IsStart(ev core.Event) bool { - return ev.Label(0).Key() == keys.Start -} - -// IsEnd returns true if the event was built by the End function. -// It is intended to be used in exporters to identify the semantics of the -// event when deciding what to do with it. -func IsEnd(ev core.Event) bool { - return ev.Label(0).Key() == keys.End -} - -// Detach returns a context without an associated span. -// This allows the creation of spans that are not children of the current span. -func Detach(ctx context.Context) context.Context { - return core.Export(ctx, core.MakeEvent([3]label.Label{ - keys.Detach.New(), - }, nil)) -} - -// IsDetach returns true if the event was built by the Detach function. -// It is intended to be used in exporters to identify the semantics of the -// event when deciding what to do with it. -func IsDetach(ev core.Event) bool { - return ev.Label(0).Key() == keys.Detach -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/keys/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/event/keys/BUILD.bazel deleted file mode 100644 index 1feefdf1a834..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/keys/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "keys", - srcs = [ - "keys.go", - "standard.go", - "util.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/event/keys", - importpath = "golang.org/x/tools/internal/event/keys", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], - deps = ["//go/extractor/vendor/golang.org/x/tools/internal/event/label"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/keys/keys.go b/go/extractor/vendor/golang.org/x/tools/internal/event/keys/keys.go deleted file mode 100644 index a02206e30150..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/keys/keys.go +++ /dev/null @@ -1,564 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package keys - -import ( - "fmt" - "io" - "math" - "strconv" - - "golang.org/x/tools/internal/event/label" -) - -// Value represents a key for untyped values. -type Value struct { - name string - description string -} - -// New creates a new Key for untyped values. -func New(name, description string) *Value { - return &Value{name: name, description: description} -} - -func (k *Value) Name() string { return k.name } -func (k *Value) Description() string { return k.description } - -func (k *Value) Format(w io.Writer, buf []byte, l label.Label) { - fmt.Fprint(w, k.From(l)) -} - -// Get can be used to get a label for the key from a label.Map. -func (k *Value) Get(lm label.Map) interface{} { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return nil -} - -// From can be used to get a value from a Label. -func (k *Value) From(t label.Label) interface{} { return t.UnpackValue() } - -// Of creates a new Label with this key and the supplied value. -func (k *Value) Of(value interface{}) label.Label { return label.OfValue(k, value) } - -// Tag represents a key for tagging labels that have no value. -// These are used when the existence of the label is the entire information it -// carries, such as marking events to be of a specific kind, or from a specific -// package. -type Tag struct { - name string - description string -} - -// NewTag creates a new Key for tagging labels. -func NewTag(name, description string) *Tag { - return &Tag{name: name, description: description} -} - -func (k *Tag) Name() string { return k.name } -func (k *Tag) Description() string { return k.description } - -func (k *Tag) Format(w io.Writer, buf []byte, l label.Label) {} - -// New creates a new Label with this key. -func (k *Tag) New() label.Label { return label.OfValue(k, nil) } - -// Int represents a key -type Int struct { - name string - description string -} - -// NewInt creates a new Key for int values. -func NewInt(name, description string) *Int { - return &Int{name: name, description: description} -} - -func (k *Int) Name() string { return k.name } -func (k *Int) Description() string { return k.description } - -func (k *Int) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Int) Of(v int) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *Int) Get(lm label.Map) int { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *Int) From(t label.Label) int { return int(t.Unpack64()) } - -// Int8 represents a key -type Int8 struct { - name string - description string -} - -// NewInt8 creates a new Key for int8 values. -func NewInt8(name, description string) *Int8 { - return &Int8{name: name, description: description} -} - -func (k *Int8) Name() string { return k.name } -func (k *Int8) Description() string { return k.description } - -func (k *Int8) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Int8) Of(v int8) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *Int8) Get(lm label.Map) int8 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *Int8) From(t label.Label) int8 { return int8(t.Unpack64()) } - -// Int16 represents a key -type Int16 struct { - name string - description string -} - -// NewInt16 creates a new Key for int16 values. -func NewInt16(name, description string) *Int16 { - return &Int16{name: name, description: description} -} - -func (k *Int16) Name() string { return k.name } -func (k *Int16) Description() string { return k.description } - -func (k *Int16) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Int16) Of(v int16) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *Int16) Get(lm label.Map) int16 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *Int16) From(t label.Label) int16 { return int16(t.Unpack64()) } - -// Int32 represents a key -type Int32 struct { - name string - description string -} - -// NewInt32 creates a new Key for int32 values. -func NewInt32(name, description string) *Int32 { - return &Int32{name: name, description: description} -} - -func (k *Int32) Name() string { return k.name } -func (k *Int32) Description() string { return k.description } - -func (k *Int32) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Int32) Of(v int32) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *Int32) Get(lm label.Map) int32 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *Int32) From(t label.Label) int32 { return int32(t.Unpack64()) } - -// Int64 represents a key -type Int64 struct { - name string - description string -} - -// NewInt64 creates a new Key for int64 values. -func NewInt64(name, description string) *Int64 { - return &Int64{name: name, description: description} -} - -func (k *Int64) Name() string { return k.name } -func (k *Int64) Description() string { return k.description } - -func (k *Int64) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendInt(buf, k.From(l), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Int64) Of(v int64) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *Int64) Get(lm label.Map) int64 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *Int64) From(t label.Label) int64 { return int64(t.Unpack64()) } - -// UInt represents a key -type UInt struct { - name string - description string -} - -// NewUInt creates a new Key for uint values. -func NewUInt(name, description string) *UInt { - return &UInt{name: name, description: description} -} - -func (k *UInt) Name() string { return k.name } -func (k *UInt) Description() string { return k.description } - -func (k *UInt) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *UInt) Of(v uint) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *UInt) Get(lm label.Map) uint { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *UInt) From(t label.Label) uint { return uint(t.Unpack64()) } - -// UInt8 represents a key -type UInt8 struct { - name string - description string -} - -// NewUInt8 creates a new Key for uint8 values. -func NewUInt8(name, description string) *UInt8 { - return &UInt8{name: name, description: description} -} - -func (k *UInt8) Name() string { return k.name } -func (k *UInt8) Description() string { return k.description } - -func (k *UInt8) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *UInt8) Of(v uint8) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *UInt8) Get(lm label.Map) uint8 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *UInt8) From(t label.Label) uint8 { return uint8(t.Unpack64()) } - -// UInt16 represents a key -type UInt16 struct { - name string - description string -} - -// NewUInt16 creates a new Key for uint16 values. -func NewUInt16(name, description string) *UInt16 { - return &UInt16{name: name, description: description} -} - -func (k *UInt16) Name() string { return k.name } -func (k *UInt16) Description() string { return k.description } - -func (k *UInt16) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *UInt16) Of(v uint16) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *UInt16) Get(lm label.Map) uint16 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *UInt16) From(t label.Label) uint16 { return uint16(t.Unpack64()) } - -// UInt32 represents a key -type UInt32 struct { - name string - description string -} - -// NewUInt32 creates a new Key for uint32 values. -func NewUInt32(name, description string) *UInt32 { - return &UInt32{name: name, description: description} -} - -func (k *UInt32) Name() string { return k.name } -func (k *UInt32) Description() string { return k.description } - -func (k *UInt32) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *UInt32) Of(v uint32) label.Label { return label.Of64(k, uint64(v)) } - -// Get can be used to get a label for the key from a label.Map. -func (k *UInt32) Get(lm label.Map) uint32 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *UInt32) From(t label.Label) uint32 { return uint32(t.Unpack64()) } - -// UInt64 represents a key -type UInt64 struct { - name string - description string -} - -// NewUInt64 creates a new Key for uint64 values. -func NewUInt64(name, description string) *UInt64 { - return &UInt64{name: name, description: description} -} - -func (k *UInt64) Name() string { return k.name } -func (k *UInt64) Description() string { return k.description } - -func (k *UInt64) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendUint(buf, k.From(l), 10)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *UInt64) Of(v uint64) label.Label { return label.Of64(k, v) } - -// Get can be used to get a label for the key from a label.Map. -func (k *UInt64) Get(lm label.Map) uint64 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *UInt64) From(t label.Label) uint64 { return t.Unpack64() } - -// Float32 represents a key -type Float32 struct { - name string - description string -} - -// NewFloat32 creates a new Key for float32 values. -func NewFloat32(name, description string) *Float32 { - return &Float32{name: name, description: description} -} - -func (k *Float32) Name() string { return k.name } -func (k *Float32) Description() string { return k.description } - -func (k *Float32) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendFloat(buf, float64(k.From(l)), 'E', -1, 32)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Float32) Of(v float32) label.Label { - return label.Of64(k, uint64(math.Float32bits(v))) -} - -// Get can be used to get a label for the key from a label.Map. -func (k *Float32) Get(lm label.Map) float32 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *Float32) From(t label.Label) float32 { - return math.Float32frombits(uint32(t.Unpack64())) -} - -// Float64 represents a key -type Float64 struct { - name string - description string -} - -// NewFloat64 creates a new Key for int64 values. -func NewFloat64(name, description string) *Float64 { - return &Float64{name: name, description: description} -} - -func (k *Float64) Name() string { return k.name } -func (k *Float64) Description() string { return k.description } - -func (k *Float64) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendFloat(buf, k.From(l), 'E', -1, 64)) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Float64) Of(v float64) label.Label { - return label.Of64(k, math.Float64bits(v)) -} - -// Get can be used to get a label for the key from a label.Map. -func (k *Float64) Get(lm label.Map) float64 { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return 0 -} - -// From can be used to get a value from a Label. -func (k *Float64) From(t label.Label) float64 { - return math.Float64frombits(t.Unpack64()) -} - -// String represents a key -type String struct { - name string - description string -} - -// NewString creates a new Key for int64 values. -func NewString(name, description string) *String { - return &String{name: name, description: description} -} - -func (k *String) Name() string { return k.name } -func (k *String) Description() string { return k.description } - -func (k *String) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendQuote(buf, k.From(l))) -} - -// Of creates a new Label with this key and the supplied value. -func (k *String) Of(v string) label.Label { return label.OfString(k, v) } - -// Get can be used to get a label for the key from a label.Map. -func (k *String) Get(lm label.Map) string { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return "" -} - -// From can be used to get a value from a Label. -func (k *String) From(t label.Label) string { return t.UnpackString() } - -// Boolean represents a key -type Boolean struct { - name string - description string -} - -// NewBoolean creates a new Key for bool values. -func NewBoolean(name, description string) *Boolean { - return &Boolean{name: name, description: description} -} - -func (k *Boolean) Name() string { return k.name } -func (k *Boolean) Description() string { return k.description } - -func (k *Boolean) Format(w io.Writer, buf []byte, l label.Label) { - w.Write(strconv.AppendBool(buf, k.From(l))) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Boolean) Of(v bool) label.Label { - if v { - return label.Of64(k, 1) - } - return label.Of64(k, 0) -} - -// Get can be used to get a label for the key from a label.Map. -func (k *Boolean) Get(lm label.Map) bool { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return false -} - -// From can be used to get a value from a Label. -func (k *Boolean) From(t label.Label) bool { return t.Unpack64() > 0 } - -// Error represents a key -type Error struct { - name string - description string -} - -// NewError creates a new Key for int64 values. -func NewError(name, description string) *Error { - return &Error{name: name, description: description} -} - -func (k *Error) Name() string { return k.name } -func (k *Error) Description() string { return k.description } - -func (k *Error) Format(w io.Writer, buf []byte, l label.Label) { - io.WriteString(w, k.From(l).Error()) -} - -// Of creates a new Label with this key and the supplied value. -func (k *Error) Of(v error) label.Label { return label.OfValue(k, v) } - -// Get can be used to get a label for the key from a label.Map. -func (k *Error) Get(lm label.Map) error { - if t := lm.Find(k); t.Valid() { - return k.From(t) - } - return nil -} - -// From can be used to get a value from a Label. -func (k *Error) From(t label.Label) error { - err, _ := t.UnpackValue().(error) - return err -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/keys/standard.go b/go/extractor/vendor/golang.org/x/tools/internal/event/keys/standard.go deleted file mode 100644 index 7e9586659213..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/keys/standard.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package keys - -var ( - // Msg is a key used to add message strings to label lists. - Msg = NewString("message", "a readable message") - // Label is a key used to indicate an event adds labels to the context. - Label = NewTag("label", "a label context marker") - // Start is used for things like traces that have a name. - Start = NewString("start", "span start") - // Metric is a key used to indicate an event records metrics. - End = NewTag("end", "a span end marker") - // Metric is a key used to indicate an event records metrics. - Detach = NewTag("detach", "a span detach marker") - // Err is a key used to add error values to label lists. - Err = NewError("error", "an error that occurred") - // Metric is a key used to indicate an event records metrics. - Metric = NewTag("metric", "a metric event marker") -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/keys/util.go b/go/extractor/vendor/golang.org/x/tools/internal/event/keys/util.go deleted file mode 100644 index c0e8e731c900..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/keys/util.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package keys - -import ( - "sort" - "strings" -) - -// Join returns a canonical join of the keys in S: -// a sorted comma-separated string list. -func Join[S ~[]T, T ~string](s S) string { - strs := make([]string, 0, len(s)) - for _, v := range s { - strs = append(strs, string(v)) - } - sort.Strings(strs) - return strings.Join(strs, ",") -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/label/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/event/label/BUILD.bazel deleted file mode 100644 index a4430ba0a17c..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/label/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "label", - srcs = ["label.go"], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/event/label", - importpath = "golang.org/x/tools/internal/event/label", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/label/label.go b/go/extractor/vendor/golang.org/x/tools/internal/event/label/label.go deleted file mode 100644 index 0f526e1f9ab4..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/label/label.go +++ /dev/null @@ -1,215 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package label - -import ( - "fmt" - "io" - "reflect" - "unsafe" -) - -// Key is used as the identity of a Label. -// Keys are intended to be compared by pointer only, the name should be unique -// for communicating with external systems, but it is not required or enforced. -type Key interface { - // Name returns the key name. - Name() string - // Description returns a string that can be used to describe the value. - Description() string - - // Format is used in formatting to append the value of the label to the - // supplied buffer. - // The formatter may use the supplied buf as a scratch area to avoid - // allocations. - Format(w io.Writer, buf []byte, l Label) -} - -// Label holds a key and value pair. -// It is normally used when passing around lists of labels. -type Label struct { - key Key - packed uint64 - untyped interface{} -} - -// Map is the interface to a collection of Labels indexed by key. -type Map interface { - // Find returns the label that matches the supplied key. - Find(key Key) Label -} - -// List is the interface to something that provides an iterable -// list of labels. -// Iteration should start from 0 and continue until Valid returns false. -type List interface { - // Valid returns true if the index is within range for the list. - // It does not imply the label at that index will itself be valid. - Valid(index int) bool - // Label returns the label at the given index. - Label(index int) Label -} - -// list implements LabelList for a list of Labels. -type list struct { - labels []Label -} - -// filter wraps a LabelList filtering out specific labels. -type filter struct { - keys []Key - underlying List -} - -// listMap implements LabelMap for a simple list of labels. -type listMap struct { - labels []Label -} - -// mapChain implements LabelMap for a list of underlying LabelMap. -type mapChain struct { - maps []Map -} - -// OfValue creates a new label from the key and value. -// This method is for implementing new key types, label creation should -// normally be done with the Of method of the key. -func OfValue(k Key, value interface{}) Label { return Label{key: k, untyped: value} } - -// UnpackValue assumes the label was built using LabelOfValue and returns the value -// that was passed to that constructor. -// This method is for implementing new key types, for type safety normal -// access should be done with the From method of the key. -func (t Label) UnpackValue() interface{} { return t.untyped } - -// Of64 creates a new label from a key and a uint64. This is often -// used for non uint64 values that can be packed into a uint64. -// This method is for implementing new key types, label creation should -// normally be done with the Of method of the key. -func Of64(k Key, v uint64) Label { return Label{key: k, packed: v} } - -// Unpack64 assumes the label was built using LabelOf64 and returns the value that -// was passed to that constructor. -// This method is for implementing new key types, for type safety normal -// access should be done with the From method of the key. -func (t Label) Unpack64() uint64 { return t.packed } - -type stringptr unsafe.Pointer - -// OfString creates a new label from a key and a string. -// This method is for implementing new key types, label creation should -// normally be done with the Of method of the key. -func OfString(k Key, v string) Label { - hdr := (*reflect.StringHeader)(unsafe.Pointer(&v)) - return Label{ - key: k, - packed: uint64(hdr.Len), - untyped: stringptr(hdr.Data), - } -} - -// UnpackString assumes the label was built using LabelOfString and returns the -// value that was passed to that constructor. -// This method is for implementing new key types, for type safety normal -// access should be done with the From method of the key. -func (t Label) UnpackString() string { - var v string - hdr := (*reflect.StringHeader)(unsafe.Pointer(&v)) - hdr.Data = uintptr(t.untyped.(stringptr)) - hdr.Len = int(t.packed) - return v -} - -// Valid returns true if the Label is a valid one (it has a key). -func (t Label) Valid() bool { return t.key != nil } - -// Key returns the key of this Label. -func (t Label) Key() Key { return t.key } - -// Format is used for debug printing of labels. -func (t Label) Format(f fmt.State, r rune) { - if !t.Valid() { - io.WriteString(f, `nil`) - return - } - io.WriteString(f, t.Key().Name()) - io.WriteString(f, "=") - var buf [128]byte - t.Key().Format(f, buf[:0], t) -} - -func (l *list) Valid(index int) bool { - return index >= 0 && index < len(l.labels) -} - -func (l *list) Label(index int) Label { - return l.labels[index] -} - -func (f *filter) Valid(index int) bool { - return f.underlying.Valid(index) -} - -func (f *filter) Label(index int) Label { - l := f.underlying.Label(index) - for _, f := range f.keys { - if l.Key() == f { - return Label{} - } - } - return l -} - -func (lm listMap) Find(key Key) Label { - for _, l := range lm.labels { - if l.Key() == key { - return l - } - } - return Label{} -} - -func (c mapChain) Find(key Key) Label { - for _, src := range c.maps { - l := src.Find(key) - if l.Valid() { - return l - } - } - return Label{} -} - -var emptyList = &list{} - -func NewList(labels ...Label) List { - if len(labels) == 0 { - return emptyList - } - return &list{labels: labels} -} - -func Filter(l List, keys ...Key) List { - if len(keys) == 0 { - return l - } - return &filter{keys: keys, underlying: l} -} - -func NewMap(labels ...Label) Map { - return listMap{labels: labels} -} - -func MergeMaps(srcs ...Map) Map { - var nonNil []Map - for _, src := range srcs { - if src != nil { - nonNil = append(nonNil, src) - } - } - if len(nonNil) == 1 { - return nonNil[0] - } - return mapChain{maps: nonNil} -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/tag/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/event/tag/BUILD.bazel deleted file mode 100644 index d2c87f41a8ae..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/tag/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "tag", - srcs = ["tag.go"], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/event/tag", - importpath = "golang.org/x/tools/internal/event/tag", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], - deps = ["//go/extractor/vendor/golang.org/x/tools/internal/event/keys"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/event/tag/tag.go b/go/extractor/vendor/golang.org/x/tools/internal/event/tag/tag.go deleted file mode 100644 index 581b26c2041f..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/event/tag/tag.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package tag provides the labels used for telemetry throughout gopls. -package tag - -import ( - "golang.org/x/tools/internal/event/keys" -) - -var ( - // create the label keys we use - Method = keys.NewString("method", "") - StatusCode = keys.NewString("status.code", "") - StatusMessage = keys.NewString("status.message", "") - RPCID = keys.NewString("id", "") - RPCDirection = keys.NewString("direction", "") - File = keys.NewString("file", "") - Directory = keys.New("directory", "") - URI = keys.New("URI", "") - Package = keys.NewString("package", "") // sorted comma-separated list of Package IDs - PackagePath = keys.NewString("package_path", "") - Query = keys.New("query", "") - Snapshot = keys.NewUInt64("snapshot", "") - Operation = keys.NewString("operation", "") - - Position = keys.New("position", "") - Category = keys.NewString("category", "") - PackageCount = keys.NewInt("packages", "") - Files = keys.New("files", "") - Port = keys.NewInt("port", "") - Type = keys.New("type", "") - HoverKind = keys.NewString("hoverkind", "") - - NewServer = keys.NewString("new_server", "A new server was added") - EndServer = keys.NewString("end_server", "A server was shut down") - - ServerID = keys.NewString("server", "The server ID an event is related to") - Logfile = keys.NewString("logfile", "") - DebugAddress = keys.NewString("debug_address", "") - GoplsPath = keys.NewString("gopls_path", "") - ClientID = keys.NewString("client_id", "") - - Level = keys.NewInt("level", "The logging level") -) - -var ( - // create the stats we measure - Started = keys.NewInt64("started", "Count of started RPCs.") - ReceivedBytes = keys.NewInt64("received_bytes", "Bytes received.") //, unit.Bytes) - SentBytes = keys.NewInt64("sent_bytes", "Bytes sent.") //, unit.Bytes) - Latency = keys.NewFloat64("latency_ms", "Elapsed time in milliseconds") //, unit.Milliseconds) -) - -const ( - Inbound = "in" - Outbound = "out" -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/BUILD.bazel deleted file mode 100644 index 56da3b0130e2..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/BUILD.bazel +++ /dev/null @@ -1,29 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "gcimporter", - srcs = [ - "bimport.go", - "exportdata.go", - "gcimporter.go", - "iexport.go", - "iimport.go", - "newInterface10.go", - "newInterface11.go", - "support_go117.go", - "support_go118.go", - "unified_no.go", - "ureader_no.go", - "ureader_yes.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/gcimporter", - importpath = "golang.org/x/tools/internal/gcimporter", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], - deps = [ - "//go/extractor/vendor/golang.org/x/tools/go/types/objectpath", - "//go/extractor/vendor/golang.org/x/tools/internal/pkgbits", - "//go/extractor/vendor/golang.org/x/tools/internal/tokeninternal", - ], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/bimport.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/bimport.go deleted file mode 100644 index d98b0db2a9a9..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/bimport.go +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file contains the remaining vestiges of -// $GOROOT/src/go/internal/gcimporter/bimport.go. - -package gcimporter - -import ( - "fmt" - "go/token" - "go/types" - "sync" -) - -func errorf(format string, args ...interface{}) { - panic(fmt.Sprintf(format, args...)) -} - -const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go - -// Synthesize a token.Pos -type fakeFileSet struct { - fset *token.FileSet - files map[string]*fileInfo -} - -type fileInfo struct { - file *token.File - lastline int -} - -const maxlines = 64 * 1024 - -func (s *fakeFileSet) pos(file string, line, column int) token.Pos { - // TODO(mdempsky): Make use of column. - - // Since we don't know the set of needed file positions, we reserve maxlines - // positions per file. We delay calling token.File.SetLines until all - // positions have been calculated (by way of fakeFileSet.setLines), so that - // we can avoid setting unnecessary lines. See also golang/go#46586. - f := s.files[file] - if f == nil { - f = &fileInfo{file: s.fset.AddFile(file, -1, maxlines)} - s.files[file] = f - } - if line > maxlines { - line = 1 - } - if line > f.lastline { - f.lastline = line - } - - // Return a fake position assuming that f.file consists only of newlines. - return token.Pos(f.file.Base() + line - 1) -} - -func (s *fakeFileSet) setLines() { - fakeLinesOnce.Do(func() { - fakeLines = make([]int, maxlines) - for i := range fakeLines { - fakeLines[i] = i - } - }) - for _, f := range s.files { - f.file.SetLines(fakeLines[:f.lastline]) - } -} - -var ( - fakeLines []int - fakeLinesOnce sync.Once -) - -func chanDir(d int) types.ChanDir { - // tag values must match the constants in cmd/compile/internal/gc/go.go - switch d { - case 1 /* Crecv */ : - return types.RecvOnly - case 2 /* Csend */ : - return types.SendOnly - case 3 /* Cboth */ : - return types.SendRecv - default: - errorf("unexpected channel dir %d", d) - return 0 - } -} - -var predeclOnce sync.Once -var predecl []types.Type // initialized lazily - -func predeclared() []types.Type { - predeclOnce.Do(func() { - // initialize lazily to be sure that all - // elements have been initialized before - predecl = []types.Type{ // basic types - types.Typ[types.Bool], - types.Typ[types.Int], - types.Typ[types.Int8], - types.Typ[types.Int16], - types.Typ[types.Int32], - types.Typ[types.Int64], - types.Typ[types.Uint], - types.Typ[types.Uint8], - types.Typ[types.Uint16], - types.Typ[types.Uint32], - types.Typ[types.Uint64], - types.Typ[types.Uintptr], - types.Typ[types.Float32], - types.Typ[types.Float64], - types.Typ[types.Complex64], - types.Typ[types.Complex128], - types.Typ[types.String], - - // basic type aliases - types.Universe.Lookup("byte").Type(), - types.Universe.Lookup("rune").Type(), - - // error - types.Universe.Lookup("error").Type(), - - // untyped types - types.Typ[types.UntypedBool], - types.Typ[types.UntypedInt], - types.Typ[types.UntypedRune], - types.Typ[types.UntypedFloat], - types.Typ[types.UntypedComplex], - types.Typ[types.UntypedString], - types.Typ[types.UntypedNil], - - // package unsafe - types.Typ[types.UnsafePointer], - - // invalid type - types.Typ[types.Invalid], // only appears in packages with errors - - // used internally by gc; never used by this package or in .a files - anyType{}, - } - predecl = append(predecl, additionalPredeclared()...) - }) - return predecl -} - -type anyType struct{} - -func (t anyType) Underlying() types.Type { return t } -func (t anyType) String() string { return "any" } diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go deleted file mode 100644 index f6437feb1cfd..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/exportdata.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file is a copy of $GOROOT/src/go/internal/gcimporter/exportdata.go. - -// This file implements FindExportData. - -package gcimporter - -import ( - "bufio" - "fmt" - "io" - "strconv" - "strings" -) - -func readGopackHeader(r *bufio.Reader) (name string, size int64, err error) { - // See $GOROOT/include/ar.h. - hdr := make([]byte, 16+12+6+6+8+10+2) - _, err = io.ReadFull(r, hdr) - if err != nil { - return - } - // leave for debugging - if false { - fmt.Printf("header: %s", hdr) - } - s := strings.TrimSpace(string(hdr[16+12+6+6+8:][:10])) - length, err := strconv.Atoi(s) - size = int64(length) - if err != nil || hdr[len(hdr)-2] != '`' || hdr[len(hdr)-1] != '\n' { - err = fmt.Errorf("invalid archive header") - return - } - name = strings.TrimSpace(string(hdr[:16])) - return -} - -// FindExportData positions the reader r at the beginning of the -// export data section of an underlying GC-created object/archive -// file by reading from it. The reader must be positioned at the -// start of the file before calling this function. The hdr result -// is the string before the export data, either "$$" or "$$B". -// The size result is the length of the export data in bytes, or -1 if not known. -func FindExportData(r *bufio.Reader) (hdr string, size int64, err error) { - // Read first line to make sure this is an object file. - line, err := r.ReadSlice('\n') - if err != nil { - err = fmt.Errorf("can't find export data (%v)", err) - return - } - - if string(line) == "!\n" { - // Archive file. Scan to __.PKGDEF. - var name string - if name, size, err = readGopackHeader(r); err != nil { - return - } - - // First entry should be __.PKGDEF. - if name != "__.PKGDEF" { - err = fmt.Errorf("go archive is missing __.PKGDEF") - return - } - - // Read first line of __.PKGDEF data, so that line - // is once again the first line of the input. - if line, err = r.ReadSlice('\n'); err != nil { - err = fmt.Errorf("can't find export data (%v)", err) - return - } - size -= int64(len(line)) - } - - // Now at __.PKGDEF in archive or still at beginning of file. - // Either way, line should begin with "go object ". - if !strings.HasPrefix(string(line), "go object ") { - err = fmt.Errorf("not a Go object file") - return - } - - // Skip over object header to export data. - // Begins after first line starting with $$. - for line[0] != '$' { - if line, err = r.ReadSlice('\n'); err != nil { - err = fmt.Errorf("can't find export data (%v)", err) - return - } - size -= int64(len(line)) - } - hdr = string(line) - if size < 0 { - size = -1 - } - - return -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go deleted file mode 100644 index 2d078ccb19c5..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go +++ /dev/null @@ -1,273 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This file is a reduced copy of $GOROOT/src/go/internal/gcimporter/gcimporter.go. - -// Package gcimporter provides various functions for reading -// gc-generated object files that can be used to implement the -// Importer interface defined by the Go 1.5 standard library package. -// -// The encoding is deterministic: if the encoder is applied twice to -// the same types.Package data structure, both encodings are equal. -// This property may be important to avoid spurious changes in -// applications such as build systems. -// -// However, the encoder is not necessarily idempotent. Importing an -// exported package may yield a types.Package that, while it -// represents the same set of Go types as the original, may differ in -// the details of its internal representation. Because of these -// differences, re-encoding the imported package may yield a -// different, but equally valid, encoding of the package. -package gcimporter // import "golang.org/x/tools/internal/gcimporter" - -import ( - "bufio" - "bytes" - "fmt" - "go/build" - "go/token" - "go/types" - "io" - "os" - "os/exec" - "path/filepath" - "strings" - "sync" -) - -const ( - // Enable debug during development: it adds some additional checks, and - // prevents errors from being recovered. - debug = false - - // If trace is set, debugging output is printed to std out. - trace = false -) - -var exportMap sync.Map // package dir → func() (string, bool) - -// lookupGorootExport returns the location of the export data -// (normally found in the build cache, but located in GOROOT/pkg -// in prior Go releases) for the package located in pkgDir. -// -// (We use the package's directory instead of its import path -// mainly to simplify handling of the packages in src/vendor -// and cmd/vendor.) -func lookupGorootExport(pkgDir string) (string, bool) { - f, ok := exportMap.Load(pkgDir) - if !ok { - var ( - listOnce sync.Once - exportPath string - ) - f, _ = exportMap.LoadOrStore(pkgDir, func() (string, bool) { - listOnce.Do(func() { - cmd := exec.Command("go", "list", "-export", "-f", "{{.Export}}", pkgDir) - cmd.Dir = build.Default.GOROOT - var output []byte - output, err := cmd.Output() - if err != nil { - return - } - - exports := strings.Split(string(bytes.TrimSpace(output)), "\n") - if len(exports) != 1 { - return - } - - exportPath = exports[0] - }) - - return exportPath, exportPath != "" - }) - } - - return f.(func() (string, bool))() -} - -var pkgExts = [...]string{".a", ".o"} - -// FindPkg returns the filename and unique package id for an import -// path based on package information provided by build.Import (using -// the build.Default build.Context). A relative srcDir is interpreted -// relative to the current working directory. -// If no file was found, an empty filename is returned. -func FindPkg(path, srcDir string) (filename, id string) { - if path == "" { - return - } - - var noext string - switch { - default: - // "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x" - // Don't require the source files to be present. - if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282 - srcDir = abs - } - bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary) - if bp.PkgObj == "" { - var ok bool - if bp.Goroot && bp.Dir != "" { - filename, ok = lookupGorootExport(bp.Dir) - } - if !ok { - id = path // make sure we have an id to print in error message - return - } - } else { - noext = strings.TrimSuffix(bp.PkgObj, ".a") - id = bp.ImportPath - } - - case build.IsLocalImport(path): - // "./x" -> "/this/directory/x.ext", "/this/directory/x" - noext = filepath.Join(srcDir, path) - id = noext - - case filepath.IsAbs(path): - // for completeness only - go/build.Import - // does not support absolute imports - // "/x" -> "/x.ext", "/x" - noext = path - id = path - } - - if false { // for debugging - if path != id { - fmt.Printf("%s -> %s\n", path, id) - } - } - - if filename != "" { - if f, err := os.Stat(filename); err == nil && !f.IsDir() { - return - } - } - - // try extensions - for _, ext := range pkgExts { - filename = noext + ext - if f, err := os.Stat(filename); err == nil && !f.IsDir() { - return - } - } - - filename = "" // not found - return -} - -// Import imports a gc-generated package given its import path and srcDir, adds -// the corresponding package object to the packages map, and returns the object. -// The packages map must contain all packages already imported. -func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) { - var rc io.ReadCloser - var filename, id string - if lookup != nil { - // With custom lookup specified, assume that caller has - // converted path to a canonical import path for use in the map. - if path == "unsafe" { - return types.Unsafe, nil - } - id = path - - // No need to re-import if the package was imported completely before. - if pkg = packages[id]; pkg != nil && pkg.Complete() { - return - } - f, err := lookup(path) - if err != nil { - return nil, err - } - rc = f - } else { - filename, id = FindPkg(path, srcDir) - if filename == "" { - if path == "unsafe" { - return types.Unsafe, nil - } - return nil, fmt.Errorf("can't find import: %q", id) - } - - // no need to re-import if the package was imported completely before - if pkg = packages[id]; pkg != nil && pkg.Complete() { - return - } - - // open file - f, err := os.Open(filename) - if err != nil { - return nil, err - } - defer func() { - if err != nil { - // add file name to error - err = fmt.Errorf("%s: %v", filename, err) - } - }() - rc = f - } - defer rc.Close() - - var hdr string - var size int64 - buf := bufio.NewReader(rc) - if hdr, size, err = FindExportData(buf); err != nil { - return - } - - switch hdr { - case "$$B\n": - var data []byte - data, err = io.ReadAll(buf) - if err != nil { - break - } - - // TODO(gri): allow clients of go/importer to provide a FileSet. - // Or, define a new standard go/types/gcexportdata package. - fset := token.NewFileSet() - - // Select appropriate importer. - if len(data) > 0 { - switch data[0] { - case 'v', 'c', 'd': // binary, till go1.10 - return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) - - case 'i': // indexed, till go1.19 - _, pkg, err := IImportData(fset, packages, data[1:], id) - return pkg, err - - case 'u': // unified, from go1.20 - _, pkg, err := UImportData(fset, packages, data[1:size], id) - return pkg, err - - default: - l := len(data) - if l > 10 { - l = 10 - } - return nil, fmt.Errorf("unexpected export data with prefix %q for path %s", string(data[:l]), id) - } - } - - default: - err = fmt.Errorf("unknown export data header: %q", hdr) - } - - return -} - -func deref(typ types.Type) types.Type { - if p, _ := typ.(*types.Pointer); p != nil { - return p.Elem() - } - return typ -} - -type byPath []*types.Package - -func (a byPath) Len() int { return len(a) } -func (a byPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() } diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iexport.go deleted file mode 100644 index 2ee8c70164f8..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iexport.go +++ /dev/null @@ -1,1321 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Indexed binary package export. -// This file was derived from $GOROOT/src/cmd/compile/internal/gc/iexport.go; -// see that file for specification of the format. - -package gcimporter - -import ( - "bytes" - "encoding/binary" - "fmt" - "go/constant" - "go/token" - "go/types" - "io" - "math/big" - "reflect" - "sort" - "strconv" - "strings" - - "golang.org/x/tools/go/types/objectpath" - "golang.org/x/tools/internal/tokeninternal" -) - -// IExportShallow encodes "shallow" export data for the specified package. -// -// No promises are made about the encoding other than that it can be decoded by -// the same version of IIExportShallow. If you plan to save export data in the -// file system, be sure to include a cryptographic digest of the executable in -// the key to avoid version skew. -// -// If the provided reportf func is non-nil, it will be used for reporting bugs -// encountered during export. -// TODO(rfindley): remove reportf when we are confident enough in the new -// objectpath encoding. -func IExportShallow(fset *token.FileSet, pkg *types.Package, reportf ReportFunc) ([]byte, error) { - // In principle this operation can only fail if out.Write fails, - // but that's impossible for bytes.Buffer---and as a matter of - // fact iexportCommon doesn't even check for I/O errors. - // TODO(adonovan): handle I/O errors properly. - // TODO(adonovan): use byte slices throughout, avoiding copying. - const bundle, shallow = false, true - var out bytes.Buffer - err := iexportCommon(&out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg}) - return out.Bytes(), err -} - -// IImportShallow decodes "shallow" types.Package data encoded by -// IExportShallow in the same executable. This function cannot import data from -// cmd/compile or gcexportdata.Write. -// -// The importer calls getPackages to obtain package symbols for all -// packages mentioned in the export data, including the one being -// decoded. -// -// If the provided reportf func is non-nil, it will be used for reporting bugs -// encountered during import. -// TODO(rfindley): remove reportf when we are confident enough in the new -// objectpath encoding. -func IImportShallow(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, path string, reportf ReportFunc) (*types.Package, error) { - const bundle = false - const shallow = true - pkgs, err := iimportCommon(fset, getPackages, data, bundle, path, shallow, reportf) - if err != nil { - return nil, err - } - return pkgs[0], nil -} - -// ReportFunc is the type of a function used to report formatted bugs. -type ReportFunc = func(string, ...interface{}) - -// Current bundled export format version. Increase with each format change. -// 0: initial implementation -const bundleVersion = 0 - -// IExportData writes indexed export data for pkg to out. -// -// If no file set is provided, position info will be missing. -// The package path of the top-level package will not be recorded, -// so that calls to IImportData can override with a provided package path. -func IExportData(out io.Writer, fset *token.FileSet, pkg *types.Package) error { - const bundle, shallow = false, false - return iexportCommon(out, fset, bundle, shallow, iexportVersion, []*types.Package{pkg}) -} - -// IExportBundle writes an indexed export bundle for pkgs to out. -func IExportBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error { - const bundle, shallow = true, false - return iexportCommon(out, fset, bundle, shallow, iexportVersion, pkgs) -} - -func iexportCommon(out io.Writer, fset *token.FileSet, bundle, shallow bool, version int, pkgs []*types.Package) (err error) { - if !debug { - defer func() { - if e := recover(); e != nil { - if ierr, ok := e.(internalError); ok { - err = ierr - return - } - // Not an internal error; panic again. - panic(e) - } - }() - } - - p := iexporter{ - fset: fset, - version: version, - shallow: shallow, - allPkgs: map[*types.Package]bool{}, - stringIndex: map[string]uint64{}, - declIndex: map[types.Object]uint64{}, - tparamNames: map[types.Object]string{}, - typIndex: map[types.Type]uint64{}, - } - if !bundle { - p.localpkg = pkgs[0] - } - - for i, pt := range predeclared() { - p.typIndex[pt] = uint64(i) - } - if len(p.typIndex) > predeclReserved { - panic(internalErrorf("too many predeclared types: %d > %d", len(p.typIndex), predeclReserved)) - } - - // Initialize work queue with exported declarations. - for _, pkg := range pkgs { - scope := pkg.Scope() - for _, name := range scope.Names() { - if token.IsExported(name) { - p.pushDecl(scope.Lookup(name)) - } - } - - if bundle { - // Ensure pkg and its imports are included in the index. - p.allPkgs[pkg] = true - for _, imp := range pkg.Imports() { - p.allPkgs[imp] = true - } - } - } - - // Loop until no more work. - for !p.declTodo.empty() { - p.doDecl(p.declTodo.popHead()) - } - - // Produce index of offset of each file record in files. - var files intWriter - var fileOffset []uint64 // fileOffset[i] is offset in files of file encoded as i - if p.shallow { - fileOffset = make([]uint64, len(p.fileInfos)) - for i, info := range p.fileInfos { - fileOffset[i] = uint64(files.Len()) - p.encodeFile(&files, info.file, info.needed) - } - } - - // Append indices to data0 section. - dataLen := uint64(p.data0.Len()) - w := p.newWriter() - w.writeIndex(p.declIndex) - - if bundle { - w.uint64(uint64(len(pkgs))) - for _, pkg := range pkgs { - w.pkg(pkg) - imps := pkg.Imports() - w.uint64(uint64(len(imps))) - for _, imp := range imps { - w.pkg(imp) - } - } - } - w.flush() - - // Assemble header. - var hdr intWriter - if bundle { - hdr.uint64(bundleVersion) - } - hdr.uint64(uint64(p.version)) - hdr.uint64(uint64(p.strings.Len())) - if p.shallow { - hdr.uint64(uint64(files.Len())) - hdr.uint64(uint64(len(fileOffset))) - for _, offset := range fileOffset { - hdr.uint64(offset) - } - } - hdr.uint64(dataLen) - - // Flush output. - io.Copy(out, &hdr) - io.Copy(out, &p.strings) - if p.shallow { - io.Copy(out, &files) - } - io.Copy(out, &p.data0) - - return nil -} - -// encodeFile writes to w a representation of the file sufficient to -// faithfully restore position information about all needed offsets. -// Mutates the needed array. -func (p *iexporter) encodeFile(w *intWriter, file *token.File, needed []uint64) { - _ = needed[0] // precondition: needed is non-empty - - w.uint64(p.stringOff(file.Name())) - - size := uint64(file.Size()) - w.uint64(size) - - // Sort the set of needed offsets. Duplicates are harmless. - sort.Slice(needed, func(i, j int) bool { return needed[i] < needed[j] }) - - lines := tokeninternal.GetLines(file) // byte offset of each line start - w.uint64(uint64(len(lines))) - - // Rather than record the entire array of line start offsets, - // we save only a sparse list of (index, offset) pairs for - // the start of each line that contains a needed position. - var sparse [][2]int // (index, offset) pairs -outer: - for i, lineStart := range lines { - lineEnd := size - if i < len(lines)-1 { - lineEnd = uint64(lines[i+1]) - } - // Does this line contains a needed offset? - if needed[0] < lineEnd { - sparse = append(sparse, [2]int{i, lineStart}) - for needed[0] < lineEnd { - needed = needed[1:] - if len(needed) == 0 { - break outer - } - } - } - } - - // Delta-encode the columns. - w.uint64(uint64(len(sparse))) - var prev [2]int - for _, pair := range sparse { - w.uint64(uint64(pair[0] - prev[0])) - w.uint64(uint64(pair[1] - prev[1])) - prev = pair - } -} - -// writeIndex writes out an object index. mainIndex indicates whether -// we're writing out the main index, which is also read by -// non-compiler tools and includes a complete package description -// (i.e., name and height). -func (w *exportWriter) writeIndex(index map[types.Object]uint64) { - type pkgObj struct { - obj types.Object - name string // qualified name; differs from obj.Name for type params - } - // Build a map from packages to objects from that package. - pkgObjs := map[*types.Package][]pkgObj{} - - // For the main index, make sure to include every package that - // we reference, even if we're not exporting (or reexporting) - // any symbols from it. - if w.p.localpkg != nil { - pkgObjs[w.p.localpkg] = nil - } - for pkg := range w.p.allPkgs { - pkgObjs[pkg] = nil - } - - for obj := range index { - name := w.p.exportName(obj) - pkgObjs[obj.Pkg()] = append(pkgObjs[obj.Pkg()], pkgObj{obj, name}) - } - - var pkgs []*types.Package - for pkg, objs := range pkgObjs { - pkgs = append(pkgs, pkg) - - sort.Slice(objs, func(i, j int) bool { - return objs[i].name < objs[j].name - }) - } - - sort.Slice(pkgs, func(i, j int) bool { - return w.exportPath(pkgs[i]) < w.exportPath(pkgs[j]) - }) - - w.uint64(uint64(len(pkgs))) - for _, pkg := range pkgs { - w.string(w.exportPath(pkg)) - w.string(pkg.Name()) - w.uint64(uint64(0)) // package height is not needed for go/types - - objs := pkgObjs[pkg] - w.uint64(uint64(len(objs))) - for _, obj := range objs { - w.string(obj.name) - w.uint64(index[obj.obj]) - } - } -} - -// exportName returns the 'exported' name of an object. It differs from -// obj.Name() only for type parameters (see tparamExportName for details). -func (p *iexporter) exportName(obj types.Object) (res string) { - if name := p.tparamNames[obj]; name != "" { - return name - } - return obj.Name() -} - -type iexporter struct { - fset *token.FileSet - out *bytes.Buffer - version int - - shallow bool // don't put types from other packages in the index - objEncoder *objectpath.Encoder // encodes objects from other packages in shallow mode; lazily allocated - localpkg *types.Package // (nil in bundle mode) - - // allPkgs tracks all packages that have been referenced by - // the export data, so we can ensure to include them in the - // main index. - allPkgs map[*types.Package]bool - - declTodo objQueue - - strings intWriter - stringIndex map[string]uint64 - - // In shallow mode, object positions are encoded as (file, offset). - // Each file is recorded as a line-number table. - // Only the lines of needed positions are saved faithfully. - fileInfo map[*token.File]uint64 // value is index in fileInfos - fileInfos []*filePositions - - data0 intWriter - declIndex map[types.Object]uint64 - tparamNames map[types.Object]string // typeparam->exported name - typIndex map[types.Type]uint64 - - indent int // for tracing support -} - -type filePositions struct { - file *token.File - needed []uint64 // unordered list of needed file offsets -} - -func (p *iexporter) trace(format string, args ...interface{}) { - if !trace { - // Call sites should also be guarded, but having this check here allows - // easily enabling/disabling debug trace statements. - return - } - fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...) -} - -// objectpathEncoder returns the lazily allocated objectpath.Encoder to use -// when encoding objects in other packages during shallow export. -// -// Using a shared Encoder amortizes some of cost of objectpath search. -func (p *iexporter) objectpathEncoder() *objectpath.Encoder { - if p.objEncoder == nil { - p.objEncoder = new(objectpath.Encoder) - } - return p.objEncoder -} - -// stringOff returns the offset of s within the string section. -// If not already present, it's added to the end. -func (p *iexporter) stringOff(s string) uint64 { - off, ok := p.stringIndex[s] - if !ok { - off = uint64(p.strings.Len()) - p.stringIndex[s] = off - - p.strings.uint64(uint64(len(s))) - p.strings.WriteString(s) - } - return off -} - -// fileIndexAndOffset returns the index of the token.File and the byte offset of pos within it. -func (p *iexporter) fileIndexAndOffset(file *token.File, pos token.Pos) (uint64, uint64) { - index, ok := p.fileInfo[file] - if !ok { - index = uint64(len(p.fileInfo)) - p.fileInfos = append(p.fileInfos, &filePositions{file: file}) - if p.fileInfo == nil { - p.fileInfo = make(map[*token.File]uint64) - } - p.fileInfo[file] = index - } - // Record each needed offset. - info := p.fileInfos[index] - offset := uint64(file.Offset(pos)) - info.needed = append(info.needed, offset) - - return index, offset -} - -// pushDecl adds n to the declaration work queue, if not already present. -func (p *iexporter) pushDecl(obj types.Object) { - // Package unsafe is known to the compiler and predeclared. - // Caller should not ask us to do export it. - if obj.Pkg() == types.Unsafe { - panic("cannot export package unsafe") - } - - // Shallow export data: don't index decls from other packages. - if p.shallow && obj.Pkg() != p.localpkg { - return - } - - if _, ok := p.declIndex[obj]; ok { - return - } - - p.declIndex[obj] = ^uint64(0) // mark obj present in work queue - p.declTodo.pushTail(obj) -} - -// exportWriter handles writing out individual data section chunks. -type exportWriter struct { - p *iexporter - - data intWriter - prevFile string - prevLine int64 - prevColumn int64 -} - -func (w *exportWriter) exportPath(pkg *types.Package) string { - if pkg == w.p.localpkg { - return "" - } - return pkg.Path() -} - -func (p *iexporter) doDecl(obj types.Object) { - if trace { - p.trace("exporting decl %v (%T)", obj, obj) - p.indent++ - defer func() { - p.indent-- - p.trace("=> %s", obj) - }() - } - w := p.newWriter() - - switch obj := obj.(type) { - case *types.Var: - w.tag('V') - w.pos(obj.Pos()) - w.typ(obj.Type(), obj.Pkg()) - - case *types.Func: - sig, _ := obj.Type().(*types.Signature) - if sig.Recv() != nil { - // We shouldn't see methods in the package scope, - // but the type checker may repair "func () F() {}" - // to "func (Invalid) F()" and then treat it like "func F()", - // so allow that. See golang/go#57729. - if sig.Recv().Type() != types.Typ[types.Invalid] { - panic(internalErrorf("unexpected method: %v", sig)) - } - } - - // Function. - if sig.TypeParams().Len() == 0 { - w.tag('F') - } else { - w.tag('G') - } - w.pos(obj.Pos()) - // The tparam list of the function type is the declaration of the type - // params. So, write out the type params right now. Then those type params - // will be referenced via their type offset (via typOff) in all other - // places in the signature and function where they are used. - // - // While importing the type parameters, tparamList computes and records - // their export name, so that it can be later used when writing the index. - if tparams := sig.TypeParams(); tparams.Len() > 0 { - w.tparamList(obj.Name(), tparams, obj.Pkg()) - } - w.signature(sig) - - case *types.Const: - w.tag('C') - w.pos(obj.Pos()) - w.value(obj.Type(), obj.Val()) - - case *types.TypeName: - t := obj.Type() - - if tparam, ok := t.(*types.TypeParam); ok { - w.tag('P') - w.pos(obj.Pos()) - constraint := tparam.Constraint() - if p.version >= iexportVersionGo1_18 { - implicit := false - if iface, _ := constraint.(*types.Interface); iface != nil { - implicit = iface.IsImplicit() - } - w.bool(implicit) - } - w.typ(constraint, obj.Pkg()) - break - } - - if obj.IsAlias() { - w.tag('A') - w.pos(obj.Pos()) - w.typ(t, obj.Pkg()) - break - } - - // Defined type. - named, ok := t.(*types.Named) - if !ok { - panic(internalErrorf("%s is not a defined type", t)) - } - - if named.TypeParams().Len() == 0 { - w.tag('T') - } else { - w.tag('U') - } - w.pos(obj.Pos()) - - if named.TypeParams().Len() > 0 { - // While importing the type parameters, tparamList computes and records - // their export name, so that it can be later used when writing the index. - w.tparamList(obj.Name(), named.TypeParams(), obj.Pkg()) - } - - underlying := obj.Type().Underlying() - w.typ(underlying, obj.Pkg()) - - if types.IsInterface(t) { - break - } - - n := named.NumMethods() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - m := named.Method(i) - w.pos(m.Pos()) - w.string(m.Name()) - sig, _ := m.Type().(*types.Signature) - - // Receiver type parameters are type arguments of the receiver type, so - // their name must be qualified before exporting recv. - if rparams := sig.RecvTypeParams(); rparams.Len() > 0 { - prefix := obj.Name() + "." + m.Name() - for i := 0; i < rparams.Len(); i++ { - rparam := rparams.At(i) - name := tparamExportName(prefix, rparam) - w.p.tparamNames[rparam.Obj()] = name - } - } - w.param(sig.Recv()) - w.signature(sig) - } - - default: - panic(internalErrorf("unexpected object: %v", obj)) - } - - p.declIndex[obj] = w.flush() -} - -func (w *exportWriter) tag(tag byte) { - w.data.WriteByte(tag) -} - -func (w *exportWriter) pos(pos token.Pos) { - if w.p.shallow { - w.posV2(pos) - } else if w.p.version >= iexportVersionPosCol { - w.posV1(pos) - } else { - w.posV0(pos) - } -} - -// posV2 encoding (used only in shallow mode) records positions as -// (file, offset), where file is the index in the token.File table -// (which records the file name and newline offsets) and offset is a -// byte offset. It effectively ignores //line directives. -func (w *exportWriter) posV2(pos token.Pos) { - if pos == token.NoPos { - w.uint64(0) - return - } - file := w.p.fset.File(pos) // fset must be non-nil - index, offset := w.p.fileIndexAndOffset(file, pos) - w.uint64(1 + index) - w.uint64(offset) -} - -func (w *exportWriter) posV1(pos token.Pos) { - if w.p.fset == nil { - w.int64(0) - return - } - - p := w.p.fset.Position(pos) - file := p.Filename - line := int64(p.Line) - column := int64(p.Column) - - deltaColumn := (column - w.prevColumn) << 1 - deltaLine := (line - w.prevLine) << 1 - - if file != w.prevFile { - deltaLine |= 1 - } - if deltaLine != 0 { - deltaColumn |= 1 - } - - w.int64(deltaColumn) - if deltaColumn&1 != 0 { - w.int64(deltaLine) - if deltaLine&1 != 0 { - w.string(file) - } - } - - w.prevFile = file - w.prevLine = line - w.prevColumn = column -} - -func (w *exportWriter) posV0(pos token.Pos) { - if w.p.fset == nil { - w.int64(0) - return - } - - p := w.p.fset.Position(pos) - file := p.Filename - line := int64(p.Line) - - // When file is the same as the last position (common case), - // we can save a few bytes by delta encoding just the line - // number. - // - // Note: Because data objects may be read out of order (or not - // at all), we can only apply delta encoding within a single - // object. This is handled implicitly by tracking prevFile and - // prevLine as fields of exportWriter. - - if file == w.prevFile { - delta := line - w.prevLine - w.int64(delta) - if delta == deltaNewFile { - w.int64(-1) - } - } else { - w.int64(deltaNewFile) - w.int64(line) // line >= 0 - w.string(file) - w.prevFile = file - } - w.prevLine = line -} - -func (w *exportWriter) pkg(pkg *types.Package) { - // Ensure any referenced packages are declared in the main index. - w.p.allPkgs[pkg] = true - - w.string(w.exportPath(pkg)) -} - -func (w *exportWriter) qualifiedType(obj *types.TypeName) { - name := w.p.exportName(obj) - - // Ensure any referenced declarations are written out too. - w.p.pushDecl(obj) - w.string(name) - w.pkg(obj.Pkg()) -} - -// TODO(rfindley): what does 'pkg' even mean here? It would be better to pass -// it in explicitly into signatures and structs that may use it for -// constructing fields. -func (w *exportWriter) typ(t types.Type, pkg *types.Package) { - w.data.uint64(w.p.typOff(t, pkg)) -} - -func (p *iexporter) newWriter() *exportWriter { - return &exportWriter{p: p} -} - -func (w *exportWriter) flush() uint64 { - off := uint64(w.p.data0.Len()) - io.Copy(&w.p.data0, &w.data) - return off -} - -func (p *iexporter) typOff(t types.Type, pkg *types.Package) uint64 { - off, ok := p.typIndex[t] - if !ok { - w := p.newWriter() - w.doTyp(t, pkg) - off = predeclReserved + w.flush() - p.typIndex[t] = off - } - return off -} - -func (w *exportWriter) startType(k itag) { - w.data.uint64(uint64(k)) -} - -func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { - if trace { - w.p.trace("exporting type %s (%T)", t, t) - w.p.indent++ - defer func() { - w.p.indent-- - w.p.trace("=> %s", t) - }() - } - switch t := t.(type) { - case *types.Named: - if targs := t.TypeArgs(); targs.Len() > 0 { - w.startType(instanceType) - // TODO(rfindley): investigate if this position is correct, and if it - // matters. - w.pos(t.Obj().Pos()) - w.typeList(targs, pkg) - w.typ(t.Origin(), pkg) - return - } - w.startType(definedType) - w.qualifiedType(t.Obj()) - - case *types.TypeParam: - w.startType(typeParamType) - w.qualifiedType(t.Obj()) - - case *types.Pointer: - w.startType(pointerType) - w.typ(t.Elem(), pkg) - - case *types.Slice: - w.startType(sliceType) - w.typ(t.Elem(), pkg) - - case *types.Array: - w.startType(arrayType) - w.uint64(uint64(t.Len())) - w.typ(t.Elem(), pkg) - - case *types.Chan: - w.startType(chanType) - // 1 RecvOnly; 2 SendOnly; 3 SendRecv - var dir uint64 - switch t.Dir() { - case types.RecvOnly: - dir = 1 - case types.SendOnly: - dir = 2 - case types.SendRecv: - dir = 3 - } - w.uint64(dir) - w.typ(t.Elem(), pkg) - - case *types.Map: - w.startType(mapType) - w.typ(t.Key(), pkg) - w.typ(t.Elem(), pkg) - - case *types.Signature: - w.startType(signatureType) - w.pkg(pkg) - w.signature(t) - - case *types.Struct: - w.startType(structType) - n := t.NumFields() - // Even for struct{} we must emit some qualifying package, because that's - // what the compiler does, and thus that's what the importer expects. - fieldPkg := pkg - if n > 0 { - fieldPkg = t.Field(0).Pkg() - } - if fieldPkg == nil { - // TODO(rfindley): improve this very hacky logic. - // - // The importer expects a package to be set for all struct types, even - // those with no fields. A better encoding might be to set NumFields - // before pkg. setPkg panics with a nil package, which may be possible - // to reach with invalid packages (and perhaps valid packages, too?), so - // (arbitrarily) set the localpkg if available. - // - // Alternatively, we may be able to simply guarantee that pkg != nil, by - // reconsidering the encoding of constant values. - if w.p.shallow { - fieldPkg = w.p.localpkg - } else { - panic(internalErrorf("no package to set for empty struct")) - } - } - w.pkg(fieldPkg) - w.uint64(uint64(n)) - - for i := 0; i < n; i++ { - f := t.Field(i) - if w.p.shallow { - w.objectPath(f) - } - w.pos(f.Pos()) - w.string(f.Name()) // unexported fields implicitly qualified by prior setPkg - w.typ(f.Type(), fieldPkg) - w.bool(f.Anonymous()) - w.string(t.Tag(i)) // note (or tag) - } - - case *types.Interface: - w.startType(interfaceType) - w.pkg(pkg) - - n := t.NumEmbeddeds() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - ft := t.EmbeddedType(i) - tPkg := pkg - if named, _ := ft.(*types.Named); named != nil { - w.pos(named.Obj().Pos()) - } else { - w.pos(token.NoPos) - } - w.typ(ft, tPkg) - } - - // See comment for struct fields. In shallow mode we change the encoding - // for interface methods that are promoted from other packages. - - n = t.NumExplicitMethods() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - m := t.ExplicitMethod(i) - if w.p.shallow { - w.objectPath(m) - } - w.pos(m.Pos()) - w.string(m.Name()) - sig, _ := m.Type().(*types.Signature) - w.signature(sig) - } - - case *types.Union: - w.startType(unionType) - nt := t.Len() - w.uint64(uint64(nt)) - for i := 0; i < nt; i++ { - term := t.Term(i) - w.bool(term.Tilde()) - w.typ(term.Type(), pkg) - } - - default: - panic(internalErrorf("unexpected type: %v, %v", t, reflect.TypeOf(t))) - } -} - -// objectPath writes the package and objectPath to use to look up obj in a -// different package, when encoding in "shallow" mode. -// -// When doing a shallow import, the importer creates only the local package, -// and requests package symbols for dependencies from the client. -// However, certain types defined in the local package may hold objects defined -// (perhaps deeply) within another package. -// -// For example, consider the following: -// -// package a -// func F() chan * map[string] struct { X int } -// -// package b -// import "a" -// var B = a.F() -// -// In this example, the type of b.B holds fields defined in package a. -// In order to have the correct canonical objects for the field defined in the -// type of B, they are encoded as objectPaths and later looked up in the -// importer. The same problem applies to interface methods. -func (w *exportWriter) objectPath(obj types.Object) { - if obj.Pkg() == nil || obj.Pkg() == w.p.localpkg { - // obj.Pkg() may be nil for the builtin error.Error. - // In this case, or if obj is declared in the local package, no need to - // encode. - w.string("") - return - } - objectPath, err := w.p.objectpathEncoder().For(obj) - if err != nil { - // Fall back to the empty string, which will cause the importer to create a - // new object, which matches earlier behavior. Creating a new object is - // sufficient for many purposes (such as type checking), but causes certain - // references algorithms to fail (golang/go#60819). However, we didn't - // notice this problem during months of gopls@v0.12.0 testing. - // - // TODO(golang/go#61674): this workaround is insufficient, as in the case - // where the field forwarded from an instantiated type that may not appear - // in the export data of the original package: - // - // // package a - // type A[P any] struct{ F P } - // - // // package b - // type B a.A[int] - // - // We need to update references algorithms not to depend on this - // de-duplication, at which point we may want to simply remove the - // workaround here. - w.string("") - return - } - w.string(string(objectPath)) - w.pkg(obj.Pkg()) -} - -func (w *exportWriter) signature(sig *types.Signature) { - w.paramList(sig.Params()) - w.paramList(sig.Results()) - if sig.Params().Len() > 0 { - w.bool(sig.Variadic()) - } -} - -func (w *exportWriter) typeList(ts *types.TypeList, pkg *types.Package) { - w.uint64(uint64(ts.Len())) - for i := 0; i < ts.Len(); i++ { - w.typ(ts.At(i), pkg) - } -} - -func (w *exportWriter) tparamList(prefix string, list *types.TypeParamList, pkg *types.Package) { - ll := uint64(list.Len()) - w.uint64(ll) - for i := 0; i < list.Len(); i++ { - tparam := list.At(i) - // Set the type parameter exportName before exporting its type. - exportName := tparamExportName(prefix, tparam) - w.p.tparamNames[tparam.Obj()] = exportName - w.typ(list.At(i), pkg) - } -} - -const blankMarker = "$" - -// tparamExportName returns the 'exported' name of a type parameter, which -// differs from its actual object name: it is prefixed with a qualifier, and -// blank type parameter names are disambiguated by their index in the type -// parameter list. -func tparamExportName(prefix string, tparam *types.TypeParam) string { - assert(prefix != "") - name := tparam.Obj().Name() - if name == "_" { - name = blankMarker + strconv.Itoa(tparam.Index()) - } - return prefix + "." + name -} - -// tparamName returns the real name of a type parameter, after stripping its -// qualifying prefix and reverting blank-name encoding. See tparamExportName -// for details. -func tparamName(exportName string) string { - // Remove the "path" from the type param name that makes it unique. - ix := strings.LastIndex(exportName, ".") - if ix < 0 { - errorf("malformed type parameter export name %s: missing prefix", exportName) - } - name := exportName[ix+1:] - if strings.HasPrefix(name, blankMarker) { - return "_" - } - return name -} - -func (w *exportWriter) paramList(tup *types.Tuple) { - n := tup.Len() - w.uint64(uint64(n)) - for i := 0; i < n; i++ { - w.param(tup.At(i)) - } -} - -func (w *exportWriter) param(obj types.Object) { - w.pos(obj.Pos()) - w.localIdent(obj) - w.typ(obj.Type(), obj.Pkg()) -} - -func (w *exportWriter) value(typ types.Type, v constant.Value) { - w.typ(typ, nil) - if w.p.version >= iexportVersionGo1_18 { - w.int64(int64(v.Kind())) - } - - if v.Kind() == constant.Unknown { - // golang/go#60605: treat unknown constant values as if they have invalid type - // - // This loses some fidelity over the package type-checked from source, but that - // is acceptable. - // - // TODO(rfindley): we should switch on the recorded constant kind rather - // than the constant type - return - } - - switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { - case types.IsBoolean: - w.bool(constant.BoolVal(v)) - case types.IsInteger: - var i big.Int - if i64, exact := constant.Int64Val(v); exact { - i.SetInt64(i64) - } else if ui64, exact := constant.Uint64Val(v); exact { - i.SetUint64(ui64) - } else { - i.SetString(v.ExactString(), 10) - } - w.mpint(&i, typ) - case types.IsFloat: - f := constantToFloat(v) - w.mpfloat(f, typ) - case types.IsComplex: - w.mpfloat(constantToFloat(constant.Real(v)), typ) - w.mpfloat(constantToFloat(constant.Imag(v)), typ) - case types.IsString: - w.string(constant.StringVal(v)) - default: - if b.Kind() == types.Invalid { - // package contains type errors - break - } - panic(internalErrorf("unexpected type %v (%v)", typ, typ.Underlying())) - } -} - -// constantToFloat converts a constant.Value with kind constant.Float to a -// big.Float. -func constantToFloat(x constant.Value) *big.Float { - x = constant.ToFloat(x) - // Use the same floating-point precision (512) as cmd/compile - // (see Mpprec in cmd/compile/internal/gc/mpfloat.go). - const mpprec = 512 - var f big.Float - f.SetPrec(mpprec) - if v, exact := constant.Float64Val(x); exact { - // float64 - f.SetFloat64(v) - } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { - // TODO(gri): add big.Rat accessor to constant.Value. - n := valueToRat(num) - d := valueToRat(denom) - f.SetRat(n.Quo(n, d)) - } else { - // Value too large to represent as a fraction => inaccessible. - // TODO(gri): add big.Float accessor to constant.Value. - _, ok := f.SetString(x.ExactString()) - assert(ok) - } - return &f -} - -func valueToRat(x constant.Value) *big.Rat { - // Convert little-endian to big-endian. - // I can't believe this is necessary. - bytes := constant.Bytes(x) - for i := 0; i < len(bytes)/2; i++ { - bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] - } - return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) -} - -// mpint exports a multi-precision integer. -// -// For unsigned types, small values are written out as a single -// byte. Larger values are written out as a length-prefixed big-endian -// byte string, where the length prefix is encoded as its complement. -// For example, bytes 0, 1, and 2 directly represent the integer -// values 0, 1, and 2; while bytes 255, 254, and 253 indicate a 1-, -// 2-, and 3-byte big-endian string follow. -// -// Encoding for signed types use the same general approach as for -// unsigned types, except small values use zig-zag encoding and the -// bottom bit of length prefix byte for large values is reserved as a -// sign bit. -// -// The exact boundary between small and large encodings varies -// according to the maximum number of bytes needed to encode a value -// of type typ. As a special case, 8-bit types are always encoded as a -// single byte. -// -// TODO(mdempsky): Is this level of complexity really worthwhile? -func (w *exportWriter) mpint(x *big.Int, typ types.Type) { - basic, ok := typ.Underlying().(*types.Basic) - if !ok { - panic(internalErrorf("unexpected type %v (%T)", typ.Underlying(), typ.Underlying())) - } - - signed, maxBytes := intSize(basic) - - negative := x.Sign() < 0 - if !signed && negative { - panic(internalErrorf("negative unsigned integer; type %v, value %v", typ, x)) - } - - b := x.Bytes() - if len(b) > 0 && b[0] == 0 { - panic(internalErrorf("leading zeros")) - } - if uint(len(b)) > maxBytes { - panic(internalErrorf("bad mpint length: %d > %d (type %v, value %v)", len(b), maxBytes, typ, x)) - } - - maxSmall := 256 - maxBytes - if signed { - maxSmall = 256 - 2*maxBytes - } - if maxBytes == 1 { - maxSmall = 256 - } - - // Check if x can use small value encoding. - if len(b) <= 1 { - var ux uint - if len(b) == 1 { - ux = uint(b[0]) - } - if signed { - ux <<= 1 - if negative { - ux-- - } - } - if ux < maxSmall { - w.data.WriteByte(byte(ux)) - return - } - } - - n := 256 - uint(len(b)) - if signed { - n = 256 - 2*uint(len(b)) - if negative { - n |= 1 - } - } - if n < maxSmall || n >= 256 { - panic(internalErrorf("encoding mistake: %d, %v, %v => %d", len(b), signed, negative, n)) - } - - w.data.WriteByte(byte(n)) - w.data.Write(b) -} - -// mpfloat exports a multi-precision floating point number. -// -// The number's value is decomposed into mantissa × 2**exponent, where -// mantissa is an integer. The value is written out as mantissa (as a -// multi-precision integer) and then the exponent, except exponent is -// omitted if mantissa is zero. -func (w *exportWriter) mpfloat(f *big.Float, typ types.Type) { - if f.IsInf() { - panic("infinite constant") - } - - // Break into f = mant × 2**exp, with 0.5 <= mant < 1. - var mant big.Float - exp := int64(f.MantExp(&mant)) - - // Scale so that mant is an integer. - prec := mant.MinPrec() - mant.SetMantExp(&mant, int(prec)) - exp -= int64(prec) - - manti, acc := mant.Int(nil) - if acc != big.Exact { - panic(internalErrorf("mantissa scaling failed for %f (%s)", f, acc)) - } - w.mpint(manti, typ) - if manti.Sign() != 0 { - w.int64(exp) - } -} - -func (w *exportWriter) bool(b bool) bool { - var x uint64 - if b { - x = 1 - } - w.uint64(x) - return b -} - -func (w *exportWriter) int64(x int64) { w.data.int64(x) } -func (w *exportWriter) uint64(x uint64) { w.data.uint64(x) } -func (w *exportWriter) string(s string) { w.uint64(w.p.stringOff(s)) } - -func (w *exportWriter) localIdent(obj types.Object) { - // Anonymous parameters. - if obj == nil { - w.string("") - return - } - - name := obj.Name() - if name == "_" { - w.string("_") - return - } - - w.string(name) -} - -type intWriter struct { - bytes.Buffer -} - -func (w *intWriter) int64(x int64) { - var buf [binary.MaxVarintLen64]byte - n := binary.PutVarint(buf[:], x) - w.Write(buf[:n]) -} - -func (w *intWriter) uint64(x uint64) { - var buf [binary.MaxVarintLen64]byte - n := binary.PutUvarint(buf[:], x) - w.Write(buf[:n]) -} - -func assert(cond bool) { - if !cond { - panic("internal error: assertion failed") - } -} - -// The below is copied from go/src/cmd/compile/internal/gc/syntax.go. - -// objQueue is a FIFO queue of types.Object. The zero value of objQueue is -// a ready-to-use empty queue. -type objQueue struct { - ring []types.Object - head, tail int -} - -// empty returns true if q contains no Nodes. -func (q *objQueue) empty() bool { - return q.head == q.tail -} - -// pushTail appends n to the tail of the queue. -func (q *objQueue) pushTail(obj types.Object) { - if len(q.ring) == 0 { - q.ring = make([]types.Object, 16) - } else if q.head+len(q.ring) == q.tail { - // Grow the ring. - nring := make([]types.Object, len(q.ring)*2) - // Copy the old elements. - part := q.ring[q.head%len(q.ring):] - if q.tail-q.head <= len(part) { - part = part[:q.tail-q.head] - copy(nring, part) - } else { - pos := copy(nring, part) - copy(nring[pos:], q.ring[:q.tail%len(q.ring)]) - } - q.ring, q.head, q.tail = nring, 0, q.tail-q.head - } - - q.ring[q.tail%len(q.ring)] = obj - q.tail++ -} - -// popHead pops a node from the head of the queue. It panics if q is empty. -func (q *objQueue) popHead() types.Object { - if q.empty() { - panic("dequeue empty") - } - obj := q.ring[q.head%len(q.ring)] - q.head++ - return obj -} - -// internalError represents an error generated inside this package. -type internalError string - -func (e internalError) Error() string { return "gcimporter: " + string(e) } - -// TODO(adonovan): make this call panic, so that it's symmetric with errorf. -// Otherwise it's easy to forget to do anything with the error. -// -// TODO(adonovan): also, consider switching the names "errorf" and -// "internalErrorf" as the former is used for bugs, whose cause is -// internal inconsistency, whereas the latter is used for ordinary -// situations like bad input, whose cause is external. -func internalErrorf(format string, args ...interface{}) error { - return internalError(fmt.Sprintf(format, args...)) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go deleted file mode 100644 index 9fffa9ad05cb..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ /dev/null @@ -1,1089 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Indexed package import. -// See cmd/compile/internal/gc/iexport.go for the export data format. - -// This file is a copy of $GOROOT/src/go/internal/gcimporter/iimport.go. - -package gcimporter - -import ( - "bytes" - "encoding/binary" - "fmt" - "go/constant" - "go/token" - "go/types" - "io" - "math/big" - "sort" - "strings" - - "golang.org/x/tools/go/types/objectpath" -) - -type intReader struct { - *bytes.Reader - path string -} - -func (r *intReader) int64() int64 { - i, err := binary.ReadVarint(r.Reader) - if err != nil { - errorf("import %q: read varint error: %v", r.path, err) - } - return i -} - -func (r *intReader) uint64() uint64 { - i, err := binary.ReadUvarint(r.Reader) - if err != nil { - errorf("import %q: read varint error: %v", r.path, err) - } - return i -} - -// Keep this in sync with constants in iexport.go. -const ( - iexportVersionGo1_11 = 0 - iexportVersionPosCol = 1 - iexportVersionGo1_18 = 2 - iexportVersionGenerics = 2 - - iexportVersionCurrent = 2 -) - -type ident struct { - pkg *types.Package - name string -} - -const predeclReserved = 32 - -type itag uint64 - -const ( - // Types - definedType itag = iota - pointerType - sliceType - arrayType - chanType - mapType - signatureType - structType - interfaceType - typeParamType - instanceType - unionType -) - -// IImportData imports a package from the serialized package data -// and returns 0 and a reference to the package. -// If the export data version is not recognized or the format is otherwise -// compromised, an error is returned. -func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) { - pkgs, err := iimportCommon(fset, GetPackagesFromMap(imports), data, false, path, false, nil) - if err != nil { - return 0, nil, err - } - return 0, pkgs[0], nil -} - -// IImportBundle imports a set of packages from the serialized package bundle. -func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) { - return iimportCommon(fset, GetPackagesFromMap(imports), data, true, "", false, nil) -} - -// A GetPackagesFunc function obtains the non-nil symbols for a set of -// packages, creating and recursively importing them as needed. An -// implementation should store each package symbol is in the Pkg -// field of the items array. -// -// Any error causes importing to fail. This can be used to quickly read -// the import manifest of an export data file without fully decoding it. -type GetPackagesFunc = func(items []GetPackagesItem) error - -// A GetPackagesItem is a request from the importer for the package -// symbol of the specified name and path. -type GetPackagesItem struct { - Name, Path string - Pkg *types.Package // to be filled in by GetPackagesFunc call - - // private importer state - pathOffset uint64 - nameIndex map[string]uint64 -} - -// GetPackagesFromMap returns a GetPackagesFunc that retrieves -// packages from the given map of package path to package. -// -// The returned function may mutate m: each requested package that is not -// found is created with types.NewPackage and inserted into m. -func GetPackagesFromMap(m map[string]*types.Package) GetPackagesFunc { - return func(items []GetPackagesItem) error { - for i, item := range items { - pkg, ok := m[item.Path] - if !ok { - pkg = types.NewPackage(item.Path, item.Name) - m[item.Path] = pkg - } - items[i].Pkg = pkg - } - return nil - } -} - -func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, bundle bool, path string, shallow bool, reportf ReportFunc) (pkgs []*types.Package, err error) { - const currentVersion = iexportVersionCurrent - version := int64(-1) - if !debug { - defer func() { - if e := recover(); e != nil { - if bundle { - err = fmt.Errorf("%v", e) - } else if version > currentVersion { - err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) - } else { - err = fmt.Errorf("internal error while importing %q (%v); please report an issue", path, e) - } - } - }() - } - - r := &intReader{bytes.NewReader(data), path} - - if bundle { - if v := r.uint64(); v != bundleVersion { - errorf("unknown bundle format version %d", v) - } - } - - version = int64(r.uint64()) - switch version { - case iexportVersionGo1_18, iexportVersionPosCol, iexportVersionGo1_11: - default: - if version > iexportVersionGo1_18 { - errorf("unstable iexport format version %d, just rebuild compiler and std library", version) - } else { - errorf("unknown iexport format version %d", version) - } - } - - sLen := int64(r.uint64()) - var fLen int64 - var fileOffset []uint64 - if shallow { - // Shallow mode uses a different position encoding. - fLen = int64(r.uint64()) - fileOffset = make([]uint64, r.uint64()) - for i := range fileOffset { - fileOffset[i] = r.uint64() - } - } - dLen := int64(r.uint64()) - - whence, _ := r.Seek(0, io.SeekCurrent) - stringData := data[whence : whence+sLen] - fileData := data[whence+sLen : whence+sLen+fLen] - declData := data[whence+sLen+fLen : whence+sLen+fLen+dLen] - r.Seek(sLen+fLen+dLen, io.SeekCurrent) - - p := iimporter{ - version: int(version), - ipath: path, - shallow: shallow, - reportf: reportf, - - stringData: stringData, - stringCache: make(map[uint64]string), - fileOffset: fileOffset, - fileData: fileData, - fileCache: make([]*token.File, len(fileOffset)), - pkgCache: make(map[uint64]*types.Package), - - declData: declData, - pkgIndex: make(map[*types.Package]map[string]uint64), - typCache: make(map[uint64]types.Type), - // Separate map for typeparams, keyed by their package and unique - // name. - tparamIndex: make(map[ident]types.Type), - - fake: fakeFileSet{ - fset: fset, - files: make(map[string]*fileInfo), - }, - } - defer p.fake.setLines() // set lines for files in fset - - for i, pt := range predeclared() { - p.typCache[uint64(i)] = pt - } - - // Gather the relevant packages from the manifest. - items := make([]GetPackagesItem, r.uint64()) - uniquePkgPaths := make(map[string]bool) - for i := range items { - pkgPathOff := r.uint64() - pkgPath := p.stringAt(pkgPathOff) - pkgName := p.stringAt(r.uint64()) - _ = r.uint64() // package height; unused by go/types - - if pkgPath == "" { - pkgPath = path - } - items[i].Name = pkgName - items[i].Path = pkgPath - items[i].pathOffset = pkgPathOff - - // Read index for package. - nameIndex := make(map[string]uint64) - nSyms := r.uint64() - // In shallow mode, only the current package (i=0) has an index. - assert(!(shallow && i > 0 && nSyms != 0)) - for ; nSyms > 0; nSyms-- { - name := p.stringAt(r.uint64()) - nameIndex[name] = r.uint64() - } - - items[i].nameIndex = nameIndex - - uniquePkgPaths[pkgPath] = true - } - // Debugging #63822; hypothesis: there are duplicate PkgPaths. - if len(uniquePkgPaths) != len(items) { - reportf("found duplicate PkgPaths while reading export data manifest: %v", items) - } - - // Request packages all at once from the client, - // enabling a parallel implementation. - if err := getPackages(items); err != nil { - return nil, err // don't wrap this error - } - - // Check the results and complete the index. - pkgList := make([]*types.Package, len(items)) - for i, item := range items { - pkg := item.Pkg - if pkg == nil { - errorf("internal error: getPackages returned nil package for %q", item.Path) - } else if pkg.Path() != item.Path { - errorf("internal error: getPackages returned wrong path %q, want %q", pkg.Path(), item.Path) - } else if pkg.Name() != item.Name { - errorf("internal error: getPackages returned wrong name %s for package %q, want %s", pkg.Name(), item.Path, item.Name) - } - p.pkgCache[item.pathOffset] = pkg - p.pkgIndex[pkg] = item.nameIndex - pkgList[i] = pkg - } - - if bundle { - pkgs = make([]*types.Package, r.uint64()) - for i := range pkgs { - pkg := p.pkgAt(r.uint64()) - imps := make([]*types.Package, r.uint64()) - for j := range imps { - imps[j] = p.pkgAt(r.uint64()) - } - pkg.SetImports(imps) - pkgs[i] = pkg - } - } else { - if len(pkgList) == 0 { - errorf("no packages found for %s", path) - panic("unreachable") - } - pkgs = pkgList[:1] - - // record all referenced packages as imports - list := append(([]*types.Package)(nil), pkgList[1:]...) - sort.Sort(byPath(list)) - pkgs[0].SetImports(list) - } - - for _, pkg := range pkgs { - if pkg.Complete() { - continue - } - - names := make([]string, 0, len(p.pkgIndex[pkg])) - for name := range p.pkgIndex[pkg] { - names = append(names, name) - } - sort.Strings(names) - for _, name := range names { - p.doDecl(pkg, name) - } - - // package was imported completely and without errors - pkg.MarkComplete() - } - - // SetConstraint can't be called if the constraint type is not yet complete. - // When type params are created in the 'P' case of (*importReader).obj(), - // the associated constraint type may not be complete due to recursion. - // Therefore, we defer calling SetConstraint there, and call it here instead - // after all types are complete. - for _, d := range p.later { - d.t.SetConstraint(d.constraint) - } - - for _, typ := range p.interfaceList { - typ.Complete() - } - - // Workaround for golang/go#61561. See the doc for instanceList for details. - for _, typ := range p.instanceList { - if iface, _ := typ.Underlying().(*types.Interface); iface != nil { - iface.Complete() - } - } - - return pkgs, nil -} - -type setConstraintArgs struct { - t *types.TypeParam - constraint types.Type -} - -type iimporter struct { - version int - ipath string - - shallow bool - reportf ReportFunc // if non-nil, used to report bugs - - stringData []byte - stringCache map[uint64]string - fileOffset []uint64 // fileOffset[i] is offset in fileData for info about file encoded as i - fileData []byte - fileCache []*token.File // memoized decoding of file encoded as i - pkgCache map[uint64]*types.Package - - declData []byte - pkgIndex map[*types.Package]map[string]uint64 - typCache map[uint64]types.Type - tparamIndex map[ident]types.Type - - fake fakeFileSet - interfaceList []*types.Interface - - // Workaround for the go/types bug golang/go#61561: instances produced during - // instantiation may contain incomplete interfaces. Here we only complete the - // underlying type of the instance, which is the most common case but doesn't - // handle parameterized interface literals defined deeper in the type. - instanceList []types.Type // instances for later completion (see golang/go#61561) - - // Arguments for calls to SetConstraint that are deferred due to recursive types - later []setConstraintArgs - - indent int // for tracing support -} - -func (p *iimporter) trace(format string, args ...interface{}) { - if !trace { - // Call sites should also be guarded, but having this check here allows - // easily enabling/disabling debug trace statements. - return - } - fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...) -} - -func (p *iimporter) doDecl(pkg *types.Package, name string) { - if debug { - p.trace("import decl %s", name) - p.indent++ - defer func() { - p.indent-- - p.trace("=> %s", name) - }() - } - // See if we've already imported this declaration. - if obj := pkg.Scope().Lookup(name); obj != nil { - return - } - - off, ok := p.pkgIndex[pkg][name] - if !ok { - // In deep mode, the index should be complete. In shallow - // mode, we should have already recursively loaded necessary - // dependencies so the above Lookup succeeds. - errorf("%v.%v not in index", pkg, name) - } - - r := &importReader{p: p, currPkg: pkg} - r.declReader.Reset(p.declData[off:]) - - r.obj(name) -} - -func (p *iimporter) stringAt(off uint64) string { - if s, ok := p.stringCache[off]; ok { - return s - } - - slen, n := binary.Uvarint(p.stringData[off:]) - if n <= 0 { - errorf("varint failed") - } - spos := off + uint64(n) - s := string(p.stringData[spos : spos+slen]) - p.stringCache[off] = s - return s -} - -func (p *iimporter) fileAt(index uint64) *token.File { - file := p.fileCache[index] - if file == nil { - off := p.fileOffset[index] - file = p.decodeFile(intReader{bytes.NewReader(p.fileData[off:]), p.ipath}) - p.fileCache[index] = file - } - return file -} - -func (p *iimporter) decodeFile(rd intReader) *token.File { - filename := p.stringAt(rd.uint64()) - size := int(rd.uint64()) - file := p.fake.fset.AddFile(filename, -1, size) - - // SetLines requires a nondecreasing sequence. - // Because it is common for clients to derive the interval - // [start, start+len(name)] from a start position, and we - // want to ensure that the end offset is on the same line, - // we fill in the gaps of the sparse encoding with values - // that strictly increase by the largest possible amount. - // This allows us to avoid having to record the actual end - // offset of each needed line. - - lines := make([]int, int(rd.uint64())) - var index, offset int - for i, n := 0, int(rd.uint64()); i < n; i++ { - index += int(rd.uint64()) - offset += int(rd.uint64()) - lines[index] = offset - - // Ensure monotonicity between points. - for j := index - 1; j > 0 && lines[j] == 0; j-- { - lines[j] = lines[j+1] - 1 - } - } - - // Ensure monotonicity after last point. - for j := len(lines) - 1; j > 0 && lines[j] == 0; j-- { - size-- - lines[j] = size - } - - if !file.SetLines(lines) { - errorf("SetLines failed: %d", lines) // can't happen - } - return file -} - -func (p *iimporter) pkgAt(off uint64) *types.Package { - if pkg, ok := p.pkgCache[off]; ok { - return pkg - } - path := p.stringAt(off) - errorf("missing package %q in %q", path, p.ipath) - return nil -} - -func (p *iimporter) typAt(off uint64, base *types.Named) types.Type { - if t, ok := p.typCache[off]; ok && canReuse(base, t) { - return t - } - - if off < predeclReserved { - errorf("predeclared type missing from cache: %v", off) - } - - r := &importReader{p: p} - r.declReader.Reset(p.declData[off-predeclReserved:]) - t := r.doType(base) - - if canReuse(base, t) { - p.typCache[off] = t - } - return t -} - -// canReuse reports whether the type rhs on the RHS of the declaration for def -// may be re-used. -// -// Specifically, if def is non-nil and rhs is an interface type with methods, it -// may not be re-used because we have a convention of setting the receiver type -// for interface methods to def. -func canReuse(def *types.Named, rhs types.Type) bool { - if def == nil { - return true - } - iface, _ := rhs.(*types.Interface) - if iface == nil { - return true - } - // Don't use iface.Empty() here as iface may not be complete. - return iface.NumEmbeddeds() == 0 && iface.NumExplicitMethods() == 0 -} - -type importReader struct { - p *iimporter - declReader bytes.Reader - currPkg *types.Package - prevFile string - prevLine int64 - prevColumn int64 -} - -func (r *importReader) obj(name string) { - tag := r.byte() - pos := r.pos() - - switch tag { - case 'A': - typ := r.typ() - - r.declare(types.NewTypeName(pos, r.currPkg, name, typ)) - - case 'C': - typ, val := r.value() - - r.declare(types.NewConst(pos, r.currPkg, name, typ, val)) - - case 'F', 'G': - var tparams []*types.TypeParam - if tag == 'G' { - tparams = r.tparamList() - } - sig := r.signature(nil, nil, tparams) - r.declare(types.NewFunc(pos, r.currPkg, name, sig)) - - case 'T', 'U': - // Types can be recursive. We need to setup a stub - // declaration before recursing. - obj := types.NewTypeName(pos, r.currPkg, name, nil) - named := types.NewNamed(obj, nil, nil) - // Declare obj before calling r.tparamList, so the new type name is recognized - // if used in the constraint of one of its own typeparams (see #48280). - r.declare(obj) - if tag == 'U' { - tparams := r.tparamList() - named.SetTypeParams(tparams) - } - - underlying := r.p.typAt(r.uint64(), named).Underlying() - named.SetUnderlying(underlying) - - if !isInterface(underlying) { - for n := r.uint64(); n > 0; n-- { - mpos := r.pos() - mname := r.ident() - recv := r.param() - - // If the receiver has any targs, set those as the - // rparams of the method (since those are the - // typeparams being used in the method sig/body). - base := baseType(recv.Type()) - assert(base != nil) - targs := base.TypeArgs() - var rparams []*types.TypeParam - if targs.Len() > 0 { - rparams = make([]*types.TypeParam, targs.Len()) - for i := range rparams { - rparams[i] = targs.At(i).(*types.TypeParam) - } - } - msig := r.signature(recv, rparams, nil) - - named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig)) - } - } - - case 'P': - // We need to "declare" a typeparam in order to have a name that - // can be referenced recursively (if needed) in the type param's - // bound. - if r.p.version < iexportVersionGenerics { - errorf("unexpected type param type") - } - name0 := tparamName(name) - tn := types.NewTypeName(pos, r.currPkg, name0, nil) - t := types.NewTypeParam(tn, nil) - - // To handle recursive references to the typeparam within its - // bound, save the partial type in tparamIndex before reading the bounds. - id := ident{r.currPkg, name} - r.p.tparamIndex[id] = t - var implicit bool - if r.p.version >= iexportVersionGo1_18 { - implicit = r.bool() - } - constraint := r.typ() - if implicit { - iface, _ := constraint.(*types.Interface) - if iface == nil { - errorf("non-interface constraint marked implicit") - } - iface.MarkImplicit() - } - // The constraint type may not be complete, if we - // are in the middle of a type recursion involving type - // constraints. So, we defer SetConstraint until we have - // completely set up all types in ImportData. - r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint}) - - case 'V': - typ := r.typ() - - r.declare(types.NewVar(pos, r.currPkg, name, typ)) - - default: - errorf("unexpected tag: %v", tag) - } -} - -func (r *importReader) declare(obj types.Object) { - obj.Pkg().Scope().Insert(obj) -} - -func (r *importReader) value() (typ types.Type, val constant.Value) { - typ = r.typ() - if r.p.version >= iexportVersionGo1_18 { - // TODO: add support for using the kind. - _ = constant.Kind(r.int64()) - } - - switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { - case types.IsBoolean: - val = constant.MakeBool(r.bool()) - - case types.IsString: - val = constant.MakeString(r.string()) - - case types.IsInteger: - var x big.Int - r.mpint(&x, b) - val = constant.Make(&x) - - case types.IsFloat: - val = r.mpfloat(b) - - case types.IsComplex: - re := r.mpfloat(b) - im := r.mpfloat(b) - val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) - - default: - if b.Kind() == types.Invalid { - val = constant.MakeUnknown() - return - } - errorf("unexpected type %v", typ) // panics - panic("unreachable") - } - - return -} - -func intSize(b *types.Basic) (signed bool, maxBytes uint) { - if (b.Info() & types.IsUntyped) != 0 { - return true, 64 - } - - switch b.Kind() { - case types.Float32, types.Complex64: - return true, 3 - case types.Float64, types.Complex128: - return true, 7 - } - - signed = (b.Info() & types.IsUnsigned) == 0 - switch b.Kind() { - case types.Int8, types.Uint8: - maxBytes = 1 - case types.Int16, types.Uint16: - maxBytes = 2 - case types.Int32, types.Uint32: - maxBytes = 4 - default: - maxBytes = 8 - } - - return -} - -func (r *importReader) mpint(x *big.Int, typ *types.Basic) { - signed, maxBytes := intSize(typ) - - maxSmall := 256 - maxBytes - if signed { - maxSmall = 256 - 2*maxBytes - } - if maxBytes == 1 { - maxSmall = 256 - } - - n, _ := r.declReader.ReadByte() - if uint(n) < maxSmall { - v := int64(n) - if signed { - v >>= 1 - if n&1 != 0 { - v = ^v - } - } - x.SetInt64(v) - return - } - - v := -n - if signed { - v = -(n &^ 1) >> 1 - } - if v < 1 || uint(v) > maxBytes { - errorf("weird decoding: %v, %v => %v", n, signed, v) - } - b := make([]byte, v) - io.ReadFull(&r.declReader, b) - x.SetBytes(b) - if signed && n&1 != 0 { - x.Neg(x) - } -} - -func (r *importReader) mpfloat(typ *types.Basic) constant.Value { - var mant big.Int - r.mpint(&mant, typ) - var f big.Float - f.SetInt(&mant) - if f.Sign() != 0 { - f.SetMantExp(&f, int(r.int64())) - } - return constant.Make(&f) -} - -func (r *importReader) ident() string { - return r.string() -} - -func (r *importReader) qualifiedIdent() (*types.Package, string) { - name := r.string() - pkg := r.pkg() - return pkg, name -} - -func (r *importReader) pos() token.Pos { - if r.p.shallow { - // precise offsets are encoded only in shallow mode - return r.posv2() - } - if r.p.version >= iexportVersionPosCol { - r.posv1() - } else { - r.posv0() - } - - if r.prevFile == "" && r.prevLine == 0 && r.prevColumn == 0 { - return token.NoPos - } - return r.p.fake.pos(r.prevFile, int(r.prevLine), int(r.prevColumn)) -} - -func (r *importReader) posv0() { - delta := r.int64() - if delta != deltaNewFile { - r.prevLine += delta - } else if l := r.int64(); l == -1 { - r.prevLine += deltaNewFile - } else { - r.prevFile = r.string() - r.prevLine = l - } -} - -func (r *importReader) posv1() { - delta := r.int64() - r.prevColumn += delta >> 1 - if delta&1 != 0 { - delta = r.int64() - r.prevLine += delta >> 1 - if delta&1 != 0 { - r.prevFile = r.string() - } - } -} - -func (r *importReader) posv2() token.Pos { - file := r.uint64() - if file == 0 { - return token.NoPos - } - tf := r.p.fileAt(file - 1) - return tf.Pos(int(r.uint64())) -} - -func (r *importReader) typ() types.Type { - return r.p.typAt(r.uint64(), nil) -} - -func isInterface(t types.Type) bool { - _, ok := t.(*types.Interface) - return ok -} - -func (r *importReader) pkg() *types.Package { return r.p.pkgAt(r.uint64()) } -func (r *importReader) string() string { return r.p.stringAt(r.uint64()) } - -func (r *importReader) doType(base *types.Named) (res types.Type) { - k := r.kind() - if debug { - r.p.trace("importing type %d (base: %s)", k, base) - r.p.indent++ - defer func() { - r.p.indent-- - r.p.trace("=> %s", res) - }() - } - switch k { - default: - errorf("unexpected kind tag in %q: %v", r.p.ipath, k) - return nil - - case definedType: - pkg, name := r.qualifiedIdent() - r.p.doDecl(pkg, name) - return pkg.Scope().Lookup(name).(*types.TypeName).Type() - case pointerType: - return types.NewPointer(r.typ()) - case sliceType: - return types.NewSlice(r.typ()) - case arrayType: - n := r.uint64() - return types.NewArray(r.typ(), int64(n)) - case chanType: - dir := chanDir(int(r.uint64())) - return types.NewChan(dir, r.typ()) - case mapType: - return types.NewMap(r.typ(), r.typ()) - case signatureType: - r.currPkg = r.pkg() - return r.signature(nil, nil, nil) - - case structType: - r.currPkg = r.pkg() - - fields := make([]*types.Var, r.uint64()) - tags := make([]string, len(fields)) - for i := range fields { - var field *types.Var - if r.p.shallow { - field, _ = r.objectPathObject().(*types.Var) - } - - fpos := r.pos() - fname := r.ident() - ftyp := r.typ() - emb := r.bool() - tag := r.string() - - // Either this is not a shallow import, the field is local, or the - // encoded objectPath failed to produce an object (a bug). - // - // Even in this last, buggy case, fall back on creating a new field. As - // discussed in iexport.go, this is not correct, but mostly works and is - // preferable to failing (for now at least). - if field == nil { - field = types.NewField(fpos, r.currPkg, fname, ftyp, emb) - } - - fields[i] = field - tags[i] = tag - } - return types.NewStruct(fields, tags) - - case interfaceType: - r.currPkg = r.pkg() - - embeddeds := make([]types.Type, r.uint64()) - for i := range embeddeds { - _ = r.pos() - embeddeds[i] = r.typ() - } - - methods := make([]*types.Func, r.uint64()) - for i := range methods { - var method *types.Func - if r.p.shallow { - method, _ = r.objectPathObject().(*types.Func) - } - - mpos := r.pos() - mname := r.ident() - - // TODO(mdempsky): Matches bimport.go, but I - // don't agree with this. - var recv *types.Var - if base != nil { - recv = types.NewVar(token.NoPos, r.currPkg, "", base) - } - msig := r.signature(recv, nil, nil) - - if method == nil { - method = types.NewFunc(mpos, r.currPkg, mname, msig) - } - methods[i] = method - } - - typ := newInterface(methods, embeddeds) - r.p.interfaceList = append(r.p.interfaceList, typ) - return typ - - case typeParamType: - if r.p.version < iexportVersionGenerics { - errorf("unexpected type param type") - } - pkg, name := r.qualifiedIdent() - id := ident{pkg, name} - if t, ok := r.p.tparamIndex[id]; ok { - // We're already in the process of importing this typeparam. - return t - } - // Otherwise, import the definition of the typeparam now. - r.p.doDecl(pkg, name) - return r.p.tparamIndex[id] - - case instanceType: - if r.p.version < iexportVersionGenerics { - errorf("unexpected instantiation type") - } - // pos does not matter for instances: they are positioned on the original - // type. - _ = r.pos() - len := r.uint64() - targs := make([]types.Type, len) - for i := range targs { - targs[i] = r.typ() - } - baseType := r.typ() - // The imported instantiated type doesn't include any methods, so - // we must always use the methods of the base (orig) type. - // TODO provide a non-nil *Environment - t, _ := types.Instantiate(nil, baseType, targs, false) - - // Workaround for golang/go#61561. See the doc for instanceList for details. - r.p.instanceList = append(r.p.instanceList, t) - return t - - case unionType: - if r.p.version < iexportVersionGenerics { - errorf("unexpected instantiation type") - } - terms := make([]*types.Term, r.uint64()) - for i := range terms { - terms[i] = types.NewTerm(r.bool(), r.typ()) - } - return types.NewUnion(terms) - } -} - -func (r *importReader) kind() itag { - return itag(r.uint64()) -} - -// objectPathObject is the inverse of exportWriter.objectPath. -// -// In shallow mode, certain fields and methods may need to be looked up in an -// imported package. See the doc for exportWriter.objectPath for a full -// explanation. -func (r *importReader) objectPathObject() types.Object { - objPath := objectpath.Path(r.string()) - if objPath == "" { - return nil - } - pkg := r.pkg() - obj, err := objectpath.Object(pkg, objPath) - if err != nil { - if r.p.reportf != nil { - r.p.reportf("failed to find object for objectPath %q: %v", objPath, err) - } - } - return obj -} - -func (r *importReader) signature(recv *types.Var, rparams []*types.TypeParam, tparams []*types.TypeParam) *types.Signature { - params := r.paramList() - results := r.paramList() - variadic := params.Len() > 0 && r.bool() - return types.NewSignatureType(recv, rparams, tparams, params, results, variadic) -} - -func (r *importReader) tparamList() []*types.TypeParam { - n := r.uint64() - if n == 0 { - return nil - } - xs := make([]*types.TypeParam, n) - for i := range xs { - // Note: the standard library importer is tolerant of nil types here, - // though would panic in SetTypeParams. - xs[i] = r.typ().(*types.TypeParam) - } - return xs -} - -func (r *importReader) paramList() *types.Tuple { - xs := make([]*types.Var, r.uint64()) - for i := range xs { - xs[i] = r.param() - } - return types.NewTuple(xs...) -} - -func (r *importReader) param() *types.Var { - pos := r.pos() - name := r.ident() - typ := r.typ() - return types.NewParam(pos, r.currPkg, name, typ) -} - -func (r *importReader) bool() bool { - return r.uint64() != 0 -} - -func (r *importReader) int64() int64 { - n, err := binary.ReadVarint(&r.declReader) - if err != nil { - errorf("readVarint: %v", err) - } - return n -} - -func (r *importReader) uint64() uint64 { - n, err := binary.ReadUvarint(&r.declReader) - if err != nil { - errorf("readUvarint: %v", err) - } - return n -} - -func (r *importReader) byte() byte { - x, err := r.declReader.ReadByte() - if err != nil { - errorf("declReader.ReadByte: %v", err) - } - return x -} - -func baseType(typ types.Type) *types.Named { - // pointer receivers are never types.Named types - if p, _ := typ.(*types.Pointer); p != nil { - typ = p.Elem() - } - // receiver base types are always (possibly generic) types.Named types - n, _ := typ.(*types.Named) - return n -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/newInterface10.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/newInterface10.go deleted file mode 100644 index 8b163e3d058a..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/newInterface10.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.11 -// +build !go1.11 - -package gcimporter - -import "go/types" - -func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { - named := make([]*types.Named, len(embeddeds)) - for i, e := range embeddeds { - var ok bool - named[i], ok = e.(*types.Named) - if !ok { - panic("embedding of non-defined interfaces in interfaces is not supported before Go 1.11") - } - } - return types.NewInterface(methods, named) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/newInterface11.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/newInterface11.go deleted file mode 100644 index 49984f40fd80..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/newInterface11.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.11 -// +build go1.11 - -package gcimporter - -import "go/types" - -func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { - return types.NewInterfaceType(methods, embeddeds) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/support_go117.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/support_go117.go deleted file mode 100644 index d892273efb61..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/support_go117.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.18 -// +build !go1.18 - -package gcimporter - -import "go/types" - -const iexportVersion = iexportVersionGo1_11 - -func additionalPredeclared() []types.Type { - return nil -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go deleted file mode 100644 index edbe6ea7041d..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/support_go118.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.18 -// +build go1.18 - -package gcimporter - -import "go/types" - -const iexportVersion = iexportVersionGenerics - -// additionalPredeclared returns additional predeclared types in go.1.18. -func additionalPredeclared() []types.Type { - return []types.Type{ - // comparable - types.Universe.Lookup("comparable").Type(), - - // any - types.Universe.Lookup("any").Type(), - } -} - -// See cmd/compile/internal/types.SplitVargenSuffix. -func splitVargenSuffix(name string) (base, suffix string) { - i := len(name) - for i > 0 && name[i-1] >= '0' && name[i-1] <= '9' { - i-- - } - const dot = "·" - if i >= len(dot) && name[i-len(dot):i] == dot { - i -= len(dot) - return name[:i], name[i:] - } - return name, "" -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go deleted file mode 100644 index 286bf445483d..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/unified_no.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !(go1.18 && goexperiment.unified) -// +build !go1.18 !goexperiment.unified - -package gcimporter - -const unifiedIR = false diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go deleted file mode 100644 index b5d69ffbe682..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/unified_yes.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.18 && goexperiment.unified -// +build go1.18,goexperiment.unified - -package gcimporter - -const unifiedIR = true diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/ureader_no.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/ureader_no.go deleted file mode 100644 index 8eb20729c2ad..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/ureader_no.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.18 -// +build !go1.18 - -package gcimporter - -import ( - "fmt" - "go/token" - "go/types" -) - -func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { - err = fmt.Errorf("go/tools compiled with a Go version earlier than 1.18 cannot read unified IR export data") - return -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go deleted file mode 100644 index b977435f626d..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go +++ /dev/null @@ -1,728 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Derived from go/internal/gcimporter/ureader.go - -//go:build go1.18 -// +build go1.18 - -package gcimporter - -import ( - "fmt" - "go/token" - "go/types" - "sort" - "strings" - - "golang.org/x/tools/internal/pkgbits" -) - -// A pkgReader holds the shared state for reading a unified IR package -// description. -type pkgReader struct { - pkgbits.PkgDecoder - - fake fakeFileSet - - ctxt *types.Context - imports map[string]*types.Package // previously imported packages, indexed by path - - // lazily initialized arrays corresponding to the unified IR - // PosBase, Pkg, and Type sections, respectively. - posBases []string // position bases (i.e., file names) - pkgs []*types.Package - typs []types.Type - - // laterFns holds functions that need to be invoked at the end of - // import reading. - laterFns []func() - // laterFors is used in case of 'type A B' to ensure that B is processed before A. - laterFors map[types.Type]int - - // ifaces holds a list of constructed Interfaces, which need to have - // Complete called after importing is done. - ifaces []*types.Interface -} - -// later adds a function to be invoked at the end of import reading. -func (pr *pkgReader) later(fn func()) { - pr.laterFns = append(pr.laterFns, fn) -} - -// See cmd/compile/internal/noder.derivedInfo. -type derivedInfo struct { - idx pkgbits.Index - needed bool -} - -// See cmd/compile/internal/noder.typeInfo. -type typeInfo struct { - idx pkgbits.Index - derived bool -} - -func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { - if !debug { - defer func() { - if x := recover(); x != nil { - err = fmt.Errorf("internal error in importing %q (%v); please report an issue", path, x) - } - }() - } - - s := string(data) - s = s[:strings.LastIndex(s, "\n$$\n")] - input := pkgbits.NewPkgDecoder(path, s) - pkg = readUnifiedPackage(fset, nil, imports, input) - return -} - -// laterFor adds a function to be invoked at the end of import reading, and records the type that function is finishing. -func (pr *pkgReader) laterFor(t types.Type, fn func()) { - if pr.laterFors == nil { - pr.laterFors = make(map[types.Type]int) - } - pr.laterFors[t] = len(pr.laterFns) - pr.laterFns = append(pr.laterFns, fn) -} - -// readUnifiedPackage reads a package description from the given -// unified IR export data decoder. -func readUnifiedPackage(fset *token.FileSet, ctxt *types.Context, imports map[string]*types.Package, input pkgbits.PkgDecoder) *types.Package { - pr := pkgReader{ - PkgDecoder: input, - - fake: fakeFileSet{ - fset: fset, - files: make(map[string]*fileInfo), - }, - - ctxt: ctxt, - imports: imports, - - posBases: make([]string, input.NumElems(pkgbits.RelocPosBase)), - pkgs: make([]*types.Package, input.NumElems(pkgbits.RelocPkg)), - typs: make([]types.Type, input.NumElems(pkgbits.RelocType)), - } - defer pr.fake.setLines() - - r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic) - pkg := r.pkg() - r.Bool() // has init - - for i, n := 0, r.Len(); i < n; i++ { - // As if r.obj(), but avoiding the Scope.Lookup call, - // to avoid eager loading of imports. - r.Sync(pkgbits.SyncObject) - assert(!r.Bool()) - r.p.objIdx(r.Reloc(pkgbits.RelocObj)) - assert(r.Len() == 0) - } - - r.Sync(pkgbits.SyncEOF) - - for _, fn := range pr.laterFns { - fn() - } - - for _, iface := range pr.ifaces { - iface.Complete() - } - - // Imports() of pkg are all of the transitive packages that were loaded. - var imps []*types.Package - for _, imp := range pr.pkgs { - if imp != nil && imp != pkg { - imps = append(imps, imp) - } - } - sort.Sort(byPath(imps)) - pkg.SetImports(imps) - - pkg.MarkComplete() - return pkg -} - -// A reader holds the state for reading a single unified IR element -// within a package. -type reader struct { - pkgbits.Decoder - - p *pkgReader - - dict *readerDict -} - -// A readerDict holds the state for type parameters that parameterize -// the current unified IR element. -type readerDict struct { - // bounds is a slice of typeInfos corresponding to the underlying - // bounds of the element's type parameters. - bounds []typeInfo - - // tparams is a slice of the constructed TypeParams for the element. - tparams []*types.TypeParam - - // devived is a slice of types derived from tparams, which may be - // instantiated while reading the current element. - derived []derivedInfo - derivedTypes []types.Type // lazily instantiated from derived -} - -func (pr *pkgReader) newReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader { - return &reader{ - Decoder: pr.NewDecoder(k, idx, marker), - p: pr, - } -} - -func (pr *pkgReader) tempReader(k pkgbits.RelocKind, idx pkgbits.Index, marker pkgbits.SyncMarker) *reader { - return &reader{ - Decoder: pr.TempDecoder(k, idx, marker), - p: pr, - } -} - -func (pr *pkgReader) retireReader(r *reader) { - pr.RetireDecoder(&r.Decoder) -} - -// @@@ Positions - -func (r *reader) pos() token.Pos { - r.Sync(pkgbits.SyncPos) - if !r.Bool() { - return token.NoPos - } - - // TODO(mdempsky): Delta encoding. - posBase := r.posBase() - line := r.Uint() - col := r.Uint() - return r.p.fake.pos(posBase, int(line), int(col)) -} - -func (r *reader) posBase() string { - return r.p.posBaseIdx(r.Reloc(pkgbits.RelocPosBase)) -} - -func (pr *pkgReader) posBaseIdx(idx pkgbits.Index) string { - if b := pr.posBases[idx]; b != "" { - return b - } - - var filename string - { - r := pr.tempReader(pkgbits.RelocPosBase, idx, pkgbits.SyncPosBase) - - // Within types2, position bases have a lot more details (e.g., - // keeping track of where //line directives appeared exactly). - // - // For go/types, we just track the file name. - - filename = r.String() - - if r.Bool() { // file base - // Was: "b = token.NewTrimmedFileBase(filename, true)" - } else { // line base - pos := r.pos() - line := r.Uint() - col := r.Uint() - - // Was: "b = token.NewLineBase(pos, filename, true, line, col)" - _, _, _ = pos, line, col - } - pr.retireReader(r) - } - b := filename - pr.posBases[idx] = b - return b -} - -// @@@ Packages - -func (r *reader) pkg() *types.Package { - r.Sync(pkgbits.SyncPkg) - return r.p.pkgIdx(r.Reloc(pkgbits.RelocPkg)) -} - -func (pr *pkgReader) pkgIdx(idx pkgbits.Index) *types.Package { - // TODO(mdempsky): Consider using some non-nil pointer to indicate - // the universe scope, so we don't need to keep re-reading it. - if pkg := pr.pkgs[idx]; pkg != nil { - return pkg - } - - pkg := pr.newReader(pkgbits.RelocPkg, idx, pkgbits.SyncPkgDef).doPkg() - pr.pkgs[idx] = pkg - return pkg -} - -func (r *reader) doPkg() *types.Package { - path := r.String() - switch path { - case "": - path = r.p.PkgPath() - case "builtin": - return nil // universe - case "unsafe": - return types.Unsafe - } - - if pkg := r.p.imports[path]; pkg != nil { - return pkg - } - - name := r.String() - - pkg := types.NewPackage(path, name) - r.p.imports[path] = pkg - - return pkg -} - -// @@@ Types - -func (r *reader) typ() types.Type { - return r.p.typIdx(r.typInfo(), r.dict) -} - -func (r *reader) typInfo() typeInfo { - r.Sync(pkgbits.SyncType) - if r.Bool() { - return typeInfo{idx: pkgbits.Index(r.Len()), derived: true} - } - return typeInfo{idx: r.Reloc(pkgbits.RelocType), derived: false} -} - -func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict) types.Type { - idx := info.idx - var where *types.Type - if info.derived { - where = &dict.derivedTypes[idx] - idx = dict.derived[idx].idx - } else { - where = &pr.typs[idx] - } - - if typ := *where; typ != nil { - return typ - } - - var typ types.Type - { - r := pr.tempReader(pkgbits.RelocType, idx, pkgbits.SyncTypeIdx) - r.dict = dict - - typ = r.doTyp() - assert(typ != nil) - pr.retireReader(r) - } - // See comment in pkgReader.typIdx explaining how this happens. - if prev := *where; prev != nil { - return prev - } - - *where = typ - return typ -} - -func (r *reader) doTyp() (res types.Type) { - switch tag := pkgbits.CodeType(r.Code(pkgbits.SyncType)); tag { - default: - errorf("unhandled type tag: %v", tag) - panic("unreachable") - - case pkgbits.TypeBasic: - return types.Typ[r.Len()] - - case pkgbits.TypeNamed: - obj, targs := r.obj() - name := obj.(*types.TypeName) - if len(targs) != 0 { - t, _ := types.Instantiate(r.p.ctxt, name.Type(), targs, false) - return t - } - return name.Type() - - case pkgbits.TypeTypeParam: - return r.dict.tparams[r.Len()] - - case pkgbits.TypeArray: - len := int64(r.Uint64()) - return types.NewArray(r.typ(), len) - case pkgbits.TypeChan: - dir := types.ChanDir(r.Len()) - return types.NewChan(dir, r.typ()) - case pkgbits.TypeMap: - return types.NewMap(r.typ(), r.typ()) - case pkgbits.TypePointer: - return types.NewPointer(r.typ()) - case pkgbits.TypeSignature: - return r.signature(nil, nil, nil) - case pkgbits.TypeSlice: - return types.NewSlice(r.typ()) - case pkgbits.TypeStruct: - return r.structType() - case pkgbits.TypeInterface: - return r.interfaceType() - case pkgbits.TypeUnion: - return r.unionType() - } -} - -func (r *reader) structType() *types.Struct { - fields := make([]*types.Var, r.Len()) - var tags []string - for i := range fields { - pos := r.pos() - pkg, name := r.selector() - ftyp := r.typ() - tag := r.String() - embedded := r.Bool() - - fields[i] = types.NewField(pos, pkg, name, ftyp, embedded) - if tag != "" { - for len(tags) < i { - tags = append(tags, "") - } - tags = append(tags, tag) - } - } - return types.NewStruct(fields, tags) -} - -func (r *reader) unionType() *types.Union { - terms := make([]*types.Term, r.Len()) - for i := range terms { - terms[i] = types.NewTerm(r.Bool(), r.typ()) - } - return types.NewUnion(terms) -} - -func (r *reader) interfaceType() *types.Interface { - methods := make([]*types.Func, r.Len()) - embeddeds := make([]types.Type, r.Len()) - implicit := len(methods) == 0 && len(embeddeds) == 1 && r.Bool() - - for i := range methods { - pos := r.pos() - pkg, name := r.selector() - mtyp := r.signature(nil, nil, nil) - methods[i] = types.NewFunc(pos, pkg, name, mtyp) - } - - for i := range embeddeds { - embeddeds[i] = r.typ() - } - - iface := types.NewInterfaceType(methods, embeddeds) - if implicit { - iface.MarkImplicit() - } - - // We need to call iface.Complete(), but if there are any embedded - // defined types, then we may not have set their underlying - // interface type yet. So we need to defer calling Complete until - // after we've called SetUnderlying everywhere. - // - // TODO(mdempsky): After CL 424876 lands, it should be safe to call - // iface.Complete() immediately. - r.p.ifaces = append(r.p.ifaces, iface) - - return iface -} - -func (r *reader) signature(recv *types.Var, rtparams, tparams []*types.TypeParam) *types.Signature { - r.Sync(pkgbits.SyncSignature) - - params := r.params() - results := r.params() - variadic := r.Bool() - - return types.NewSignatureType(recv, rtparams, tparams, params, results, variadic) -} - -func (r *reader) params() *types.Tuple { - r.Sync(pkgbits.SyncParams) - - params := make([]*types.Var, r.Len()) - for i := range params { - params[i] = r.param() - } - - return types.NewTuple(params...) -} - -func (r *reader) param() *types.Var { - r.Sync(pkgbits.SyncParam) - - pos := r.pos() - pkg, name := r.localIdent() - typ := r.typ() - - return types.NewParam(pos, pkg, name, typ) -} - -// @@@ Objects - -func (r *reader) obj() (types.Object, []types.Type) { - r.Sync(pkgbits.SyncObject) - - assert(!r.Bool()) - - pkg, name := r.p.objIdx(r.Reloc(pkgbits.RelocObj)) - obj := pkgScope(pkg).Lookup(name) - - targs := make([]types.Type, r.Len()) - for i := range targs { - targs[i] = r.typ() - } - - return obj, targs -} - -func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) { - - var objPkg *types.Package - var objName string - var tag pkgbits.CodeObj - { - rname := pr.tempReader(pkgbits.RelocName, idx, pkgbits.SyncObject1) - - objPkg, objName = rname.qualifiedIdent() - assert(objName != "") - - tag = pkgbits.CodeObj(rname.Code(pkgbits.SyncCodeObj)) - pr.retireReader(rname) - } - - if tag == pkgbits.ObjStub { - assert(objPkg == nil || objPkg == types.Unsafe) - return objPkg, objName - } - - // Ignore local types promoted to global scope (#55110). - if _, suffix := splitVargenSuffix(objName); suffix != "" { - return objPkg, objName - } - - if objPkg.Scope().Lookup(objName) == nil { - dict := pr.objDictIdx(idx) - - r := pr.newReader(pkgbits.RelocObj, idx, pkgbits.SyncObject1) - r.dict = dict - - declare := func(obj types.Object) { - objPkg.Scope().Insert(obj) - } - - switch tag { - default: - panic("weird") - - case pkgbits.ObjAlias: - pos := r.pos() - typ := r.typ() - declare(types.NewTypeName(pos, objPkg, objName, typ)) - - case pkgbits.ObjConst: - pos := r.pos() - typ := r.typ() - val := r.Value() - declare(types.NewConst(pos, objPkg, objName, typ, val)) - - case pkgbits.ObjFunc: - pos := r.pos() - tparams := r.typeParamNames() - sig := r.signature(nil, nil, tparams) - declare(types.NewFunc(pos, objPkg, objName, sig)) - - case pkgbits.ObjType: - pos := r.pos() - - obj := types.NewTypeName(pos, objPkg, objName, nil) - named := types.NewNamed(obj, nil, nil) - declare(obj) - - named.SetTypeParams(r.typeParamNames()) - - setUnderlying := func(underlying types.Type) { - // If the underlying type is an interface, we need to - // duplicate its methods so we can replace the receiver - // parameter's type (#49906). - if iface, ok := underlying.(*types.Interface); ok && iface.NumExplicitMethods() != 0 { - methods := make([]*types.Func, iface.NumExplicitMethods()) - for i := range methods { - fn := iface.ExplicitMethod(i) - sig := fn.Type().(*types.Signature) - - recv := types.NewVar(fn.Pos(), fn.Pkg(), "", named) - methods[i] = types.NewFunc(fn.Pos(), fn.Pkg(), fn.Name(), types.NewSignature(recv, sig.Params(), sig.Results(), sig.Variadic())) - } - - embeds := make([]types.Type, iface.NumEmbeddeds()) - for i := range embeds { - embeds[i] = iface.EmbeddedType(i) - } - - newIface := types.NewInterfaceType(methods, embeds) - r.p.ifaces = append(r.p.ifaces, newIface) - underlying = newIface - } - - named.SetUnderlying(underlying) - } - - // Since go.dev/cl/455279, we can assume rhs.Underlying() will - // always be non-nil. However, to temporarily support users of - // older snapshot releases, we continue to fallback to the old - // behavior for now. - // - // TODO(mdempsky): Remove fallback code and simplify after - // allowing time for snapshot users to upgrade. - rhs := r.typ() - if underlying := rhs.Underlying(); underlying != nil { - setUnderlying(underlying) - } else { - pk := r.p - pk.laterFor(named, func() { - // First be sure that the rhs is initialized, if it needs to be initialized. - delete(pk.laterFors, named) // prevent cycles - if i, ok := pk.laterFors[rhs]; ok { - f := pk.laterFns[i] - pk.laterFns[i] = func() {} // function is running now, so replace it with a no-op - f() // initialize RHS - } - setUnderlying(rhs.Underlying()) - }) - } - - for i, n := 0, r.Len(); i < n; i++ { - named.AddMethod(r.method()) - } - - case pkgbits.ObjVar: - pos := r.pos() - typ := r.typ() - declare(types.NewVar(pos, objPkg, objName, typ)) - } - } - - return objPkg, objName -} - -func (pr *pkgReader) objDictIdx(idx pkgbits.Index) *readerDict { - - var dict readerDict - - { - r := pr.tempReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1) - if implicits := r.Len(); implicits != 0 { - errorf("unexpected object with %v implicit type parameter(s)", implicits) - } - - dict.bounds = make([]typeInfo, r.Len()) - for i := range dict.bounds { - dict.bounds[i] = r.typInfo() - } - - dict.derived = make([]derivedInfo, r.Len()) - dict.derivedTypes = make([]types.Type, len(dict.derived)) - for i := range dict.derived { - dict.derived[i] = derivedInfo{r.Reloc(pkgbits.RelocType), r.Bool()} - } - - pr.retireReader(r) - } - // function references follow, but reader doesn't need those - - return &dict -} - -func (r *reader) typeParamNames() []*types.TypeParam { - r.Sync(pkgbits.SyncTypeParamNames) - - // Note: This code assumes it only processes objects without - // implement type parameters. This is currently fine, because - // reader is only used to read in exported declarations, which are - // always package scoped. - - if len(r.dict.bounds) == 0 { - return nil - } - - // Careful: Type parameter lists may have cycles. To allow for this, - // we construct the type parameter list in two passes: first we - // create all the TypeNames and TypeParams, then we construct and - // set the bound type. - - r.dict.tparams = make([]*types.TypeParam, len(r.dict.bounds)) - for i := range r.dict.bounds { - pos := r.pos() - pkg, name := r.localIdent() - - tname := types.NewTypeName(pos, pkg, name, nil) - r.dict.tparams[i] = types.NewTypeParam(tname, nil) - } - - typs := make([]types.Type, len(r.dict.bounds)) - for i, bound := range r.dict.bounds { - typs[i] = r.p.typIdx(bound, r.dict) - } - - // TODO(mdempsky): This is subtle, elaborate further. - // - // We have to save tparams outside of the closure, because - // typeParamNames() can be called multiple times with the same - // dictionary instance. - // - // Also, this needs to happen later to make sure SetUnderlying has - // been called. - // - // TODO(mdempsky): Is it safe to have a single "later" slice or do - // we need to have multiple passes? See comments on CL 386002 and - // go.dev/issue/52104. - tparams := r.dict.tparams - r.p.later(func() { - for i, typ := range typs { - tparams[i].SetConstraint(typ) - } - }) - - return r.dict.tparams -} - -func (r *reader) method() *types.Func { - r.Sync(pkgbits.SyncMethod) - pos := r.pos() - pkg, name := r.selector() - - rparams := r.typeParamNames() - sig := r.signature(r.param(), rparams, nil) - - _ = r.pos() // TODO(mdempsky): Remove; this is a hacker for linker.go. - return types.NewFunc(pos, pkg, name, sig) -} - -func (r *reader) qualifiedIdent() (*types.Package, string) { return r.ident(pkgbits.SyncSym) } -func (r *reader) localIdent() (*types.Package, string) { return r.ident(pkgbits.SyncLocalIdent) } -func (r *reader) selector() (*types.Package, string) { return r.ident(pkgbits.SyncSelector) } - -func (r *reader) ident(marker pkgbits.SyncMarker) (*types.Package, string) { - r.Sync(marker) - return r.pkg(), r.String() -} - -// pkgScope returns pkg.Scope(). -// If pkg is nil, it returns types.Universe instead. -// -// TODO(mdempsky): Remove after x/tools can depend on Go 1.19. -func pkgScope(pkg *types.Package) *types.Scope { - if pkg != nil { - return pkg.Scope() - } - return types.Universe -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gocommand/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/gocommand/BUILD.bazel deleted file mode 100644 index 7e64f94b95cb..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gocommand/BUILD.bazel +++ /dev/null @@ -1,22 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "gocommand", - srcs = [ - "invoke.go", - "vendor.go", - "version.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/gocommand", - importpath = "golang.org/x/tools/internal/gocommand", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], - deps = [ - "//go/extractor/vendor/golang.org/x/mod/semver", - "//go/extractor/vendor/golang.org/x/tools/internal/event", - "//go/extractor/vendor/golang.org/x/tools/internal/event/keys", - "//go/extractor/vendor/golang.org/x/tools/internal/event/label", - "//go/extractor/vendor/golang.org/x/tools/internal/event/tag", - ], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/go/extractor/vendor/golang.org/x/tools/internal/gocommand/invoke.go deleted file mode 100644 index 55312522dc2d..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ /dev/null @@ -1,465 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package gocommand is a helper for calling the go command. -package gocommand - -import ( - "bytes" - "context" - "errors" - "fmt" - "io" - "log" - "os" - "os/exec" - "reflect" - "regexp" - "runtime" - "strconv" - "strings" - "sync" - "time" - - "golang.org/x/tools/internal/event" - "golang.org/x/tools/internal/event/keys" - "golang.org/x/tools/internal/event/label" - "golang.org/x/tools/internal/event/tag" -) - -// An Runner will run go command invocations and serialize -// them if it sees a concurrency error. -type Runner struct { - // once guards the runner initialization. - once sync.Once - - // inFlight tracks available workers. - inFlight chan struct{} - - // serialized guards the ability to run a go command serially, - // to avoid deadlocks when claiming workers. - serialized chan struct{} -} - -const maxInFlight = 10 - -func (runner *Runner) initialize() { - runner.once.Do(func() { - runner.inFlight = make(chan struct{}, maxInFlight) - runner.serialized = make(chan struct{}, 1) - }) -} - -// 1.13: go: updates to go.mod needed, but contents have changed -// 1.14: go: updating go.mod: existing contents have changed since last read -var modConcurrencyError = regexp.MustCompile(`go:.*go.mod.*contents have changed`) - -// verb is an event label for the go command verb. -var verb = keys.NewString("verb", "go command verb") - -func invLabels(inv Invocation) []label.Label { - return []label.Label{verb.Of(inv.Verb), tag.Directory.Of(inv.WorkingDir)} -} - -// Run is a convenience wrapper around RunRaw. -// It returns only stdout and a "friendly" error. -func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, error) { - ctx, done := event.Start(ctx, "gocommand.Runner.Run", invLabels(inv)...) - defer done() - - stdout, _, friendly, _ := runner.RunRaw(ctx, inv) - return stdout, friendly -} - -// RunPiped runs the invocation serially, always waiting for any concurrent -// invocations to complete first. -func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) error { - ctx, done := event.Start(ctx, "gocommand.Runner.RunPiped", invLabels(inv)...) - defer done() - - _, err := runner.runPiped(ctx, inv, stdout, stderr) - return err -} - -// RunRaw runs the invocation, serializing requests only if they fight over -// go.mod changes. -// Postcondition: both error results have same nilness. -func (runner *Runner) RunRaw(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) { - ctx, done := event.Start(ctx, "gocommand.Runner.RunRaw", invLabels(inv)...) - defer done() - // Make sure the runner is always initialized. - runner.initialize() - - // First, try to run the go command concurrently. - stdout, stderr, friendlyErr, err := runner.runConcurrent(ctx, inv) - - // If we encounter a load concurrency error, we need to retry serially. - if friendlyErr != nil && modConcurrencyError.MatchString(friendlyErr.Error()) { - event.Error(ctx, "Load concurrency error, will retry serially", err) - - // Run serially by calling runPiped. - stdout.Reset() - stderr.Reset() - friendlyErr, err = runner.runPiped(ctx, inv, stdout, stderr) - } - - return stdout, stderr, friendlyErr, err -} - -// Postcondition: both error results have same nilness. -func (runner *Runner) runConcurrent(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) { - // Wait for 1 worker to become available. - select { - case <-ctx.Done(): - return nil, nil, ctx.Err(), ctx.Err() - case runner.inFlight <- struct{}{}: - defer func() { <-runner.inFlight }() - } - - stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{} - friendlyErr, err := inv.runWithFriendlyError(ctx, stdout, stderr) - return stdout, stderr, friendlyErr, err -} - -// Postcondition: both error results have same nilness. -func (runner *Runner) runPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) (error, error) { - // Make sure the runner is always initialized. - runner.initialize() - - // Acquire the serialization lock. This avoids deadlocks between two - // runPiped commands. - select { - case <-ctx.Done(): - return ctx.Err(), ctx.Err() - case runner.serialized <- struct{}{}: - defer func() { <-runner.serialized }() - } - - // Wait for all in-progress go commands to return before proceeding, - // to avoid load concurrency errors. - for i := 0; i < maxInFlight; i++ { - select { - case <-ctx.Done(): - return ctx.Err(), ctx.Err() - case runner.inFlight <- struct{}{}: - // Make sure we always "return" any workers we took. - defer func() { <-runner.inFlight }() - } - } - - return inv.runWithFriendlyError(ctx, stdout, stderr) -} - -// An Invocation represents a call to the go command. -type Invocation struct { - Verb string - Args []string - BuildFlags []string - - // If ModFlag is set, the go command is invoked with -mod=ModFlag. - ModFlag string - - // If ModFile is set, the go command is invoked with -modfile=ModFile. - ModFile string - - // If Overlay is set, the go command is invoked with -overlay=Overlay. - Overlay string - - // If CleanEnv is set, the invocation will run only with the environment - // in Env, not starting with os.Environ. - CleanEnv bool - Env []string - WorkingDir string - Logf func(format string, args ...interface{}) -} - -// Postcondition: both error results have same nilness. -func (i *Invocation) runWithFriendlyError(ctx context.Context, stdout, stderr io.Writer) (friendlyError error, rawError error) { - rawError = i.run(ctx, stdout, stderr) - if rawError != nil { - friendlyError = rawError - // Check for 'go' executable not being found. - if ee, ok := rawError.(*exec.Error); ok && ee.Err == exec.ErrNotFound { - friendlyError = fmt.Errorf("go command required, not found: %v", ee) - } - if ctx.Err() != nil { - friendlyError = ctx.Err() - } - friendlyError = fmt.Errorf("err: %v: stderr: %s", friendlyError, stderr) - } - return -} - -func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { - log := i.Logf - if log == nil { - log = func(string, ...interface{}) {} - } - - goArgs := []string{i.Verb} - - appendModFile := func() { - if i.ModFile != "" { - goArgs = append(goArgs, "-modfile="+i.ModFile) - } - } - appendModFlag := func() { - if i.ModFlag != "" { - goArgs = append(goArgs, "-mod="+i.ModFlag) - } - } - appendOverlayFlag := func() { - if i.Overlay != "" { - goArgs = append(goArgs, "-overlay="+i.Overlay) - } - } - - switch i.Verb { - case "env", "version": - goArgs = append(goArgs, i.Args...) - case "mod": - // mod needs the sub-verb before flags. - goArgs = append(goArgs, i.Args[0]) - appendModFile() - goArgs = append(goArgs, i.Args[1:]...) - case "get": - goArgs = append(goArgs, i.BuildFlags...) - appendModFile() - goArgs = append(goArgs, i.Args...) - - default: // notably list and build. - goArgs = append(goArgs, i.BuildFlags...) - appendModFile() - appendModFlag() - appendOverlayFlag() - goArgs = append(goArgs, i.Args...) - } - cmd := exec.Command("go", goArgs...) - cmd.Stdout = stdout - cmd.Stderr = stderr - - // cmd.WaitDelay was added only in go1.20 (see #50436). - if waitDelay := reflect.ValueOf(cmd).Elem().FieldByName("WaitDelay"); waitDelay.IsValid() { - // https://go.dev/issue/59541: don't wait forever copying stderr - // after the command has exited. - // After CL 484741 we copy stdout manually, so we we'll stop reading that as - // soon as ctx is done. However, we also don't want to wait around forever - // for stderr. Give a much-longer-than-reasonable delay and then assume that - // something has wedged in the kernel or runtime. - waitDelay.Set(reflect.ValueOf(30 * time.Second)) - } - - // On darwin the cwd gets resolved to the real path, which breaks anything that - // expects the working directory to keep the original path, including the - // go command when dealing with modules. - // The Go stdlib has a special feature where if the cwd and the PWD are the - // same node then it trusts the PWD, so by setting it in the env for the child - // process we fix up all the paths returned by the go command. - if !i.CleanEnv { - cmd.Env = os.Environ() - } - cmd.Env = append(cmd.Env, i.Env...) - if i.WorkingDir != "" { - cmd.Env = append(cmd.Env, "PWD="+i.WorkingDir) - cmd.Dir = i.WorkingDir - } - - defer func(start time.Time) { log("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now()) - - return runCmdContext(ctx, cmd) -} - -// DebugHangingGoCommands may be set by tests to enable additional -// instrumentation (including panics) for debugging hanging Go commands. -// -// See golang/go#54461 for details. -var DebugHangingGoCommands = false - -// runCmdContext is like exec.CommandContext except it sends os.Interrupt -// before os.Kill. -func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { - // If cmd.Stdout is not an *os.File, the exec package will create a pipe and - // copy it to the Writer in a goroutine until the process has finished and - // either the pipe reaches EOF or command's WaitDelay expires. - // - // However, the output from 'go list' can be quite large, and we don't want to - // keep reading (and allocating buffers) if we've already decided we don't - // care about the output. We don't want to wait for the process to finish, and - // we don't wait to wait for the WaitDelay to expire either. - // - // Instead, if cmd.Stdout requires a copying goroutine we explicitly replace - // it with a pipe (which is an *os.File), which we can close in order to stop - // copying output as soon as we realize we don't care about it. - var stdoutW *os.File - if cmd.Stdout != nil { - if _, ok := cmd.Stdout.(*os.File); !ok { - var stdoutR *os.File - stdoutR, stdoutW, err = os.Pipe() - if err != nil { - return err - } - prevStdout := cmd.Stdout - cmd.Stdout = stdoutW - - stdoutErr := make(chan error, 1) - go func() { - _, err := io.Copy(prevStdout, stdoutR) - if err != nil { - err = fmt.Errorf("copying stdout: %w", err) - } - stdoutErr <- err - }() - defer func() { - // We started a goroutine to copy a stdout pipe. - // Wait for it to finish, or terminate it if need be. - var err2 error - select { - case err2 = <-stdoutErr: - stdoutR.Close() - case <-ctx.Done(): - stdoutR.Close() - // Per https://pkg.go.dev/os#File.Close, the call to stdoutR.Close - // should cause the Read call in io.Copy to unblock and return - // immediately, but we still need to receive from stdoutErr to confirm - // that it has happened. - <-stdoutErr - err2 = ctx.Err() - } - if err == nil { - err = err2 - } - }() - - // Per https://pkg.go.dev/os/exec#Cmd, “If Stdout and Stderr are the - // same writer, and have a type that can be compared with ==, at most - // one goroutine at a time will call Write.” - // - // Since we're starting a goroutine that writes to cmd.Stdout, we must - // also update cmd.Stderr so that it still holds. - func() { - defer func() { recover() }() - if cmd.Stderr == prevStdout { - cmd.Stderr = cmd.Stdout - } - }() - } - } - - err = cmd.Start() - if stdoutW != nil { - // The child process has inherited the pipe file, - // so close the copy held in this process. - stdoutW.Close() - stdoutW = nil - } - if err != nil { - return err - } - - resChan := make(chan error, 1) - go func() { - resChan <- cmd.Wait() - }() - - // If we're interested in debugging hanging Go commands, stop waiting after a - // minute and panic with interesting information. - debug := DebugHangingGoCommands - if debug { - timer := time.NewTimer(1 * time.Minute) - defer timer.Stop() - select { - case err := <-resChan: - return err - case <-timer.C: - HandleHangingGoCommand(cmd.Process) - case <-ctx.Done(): - } - } else { - select { - case err := <-resChan: - return err - case <-ctx.Done(): - } - } - - // Cancelled. Interrupt and see if it ends voluntarily. - if err := cmd.Process.Signal(os.Interrupt); err == nil { - // (We used to wait only 1s but this proved - // fragile on loaded builder machines.) - timer := time.NewTimer(5 * time.Second) - defer timer.Stop() - select { - case err := <-resChan: - return err - case <-timer.C: - } - } - - // Didn't shut down in response to interrupt. Kill it hard. - // TODO(rfindley): per advice from bcmills@, it may be better to send SIGQUIT - // on certain platforms, such as unix. - if err := cmd.Process.Kill(); err != nil && !errors.Is(err, os.ErrProcessDone) && debug { - log.Printf("error killing the Go command: %v", err) - } - - return <-resChan -} - -func HandleHangingGoCommand(proc *os.Process) { - switch runtime.GOOS { - case "linux", "darwin", "freebsd", "netbsd": - fmt.Fprintln(os.Stderr, `DETECTED A HANGING GO COMMAND - -The gopls test runner has detected a hanging go command. In order to debug -this, the output of ps and lsof/fstat is printed below. - -See golang/go#54461 for more details.`) - - fmt.Fprintln(os.Stderr, "\nps axo ppid,pid,command:") - fmt.Fprintln(os.Stderr, "-------------------------") - psCmd := exec.Command("ps", "axo", "ppid,pid,command") - psCmd.Stdout = os.Stderr - psCmd.Stderr = os.Stderr - if err := psCmd.Run(); err != nil { - panic(fmt.Sprintf("running ps: %v", err)) - } - - listFiles := "lsof" - if runtime.GOOS == "freebsd" || runtime.GOOS == "netbsd" { - listFiles = "fstat" - } - - fmt.Fprintln(os.Stderr, "\n"+listFiles+":") - fmt.Fprintln(os.Stderr, "-----") - listFilesCmd := exec.Command(listFiles) - listFilesCmd.Stdout = os.Stderr - listFilesCmd.Stderr = os.Stderr - if err := listFilesCmd.Run(); err != nil { - panic(fmt.Sprintf("running %s: %v", listFiles, err)) - } - } - panic(fmt.Sprintf("detected hanging go command (pid %d): see golang/go#54461 for more details", proc.Pid)) -} - -func cmdDebugStr(cmd *exec.Cmd) string { - env := make(map[string]string) - for _, kv := range cmd.Env { - split := strings.SplitN(kv, "=", 2) - if len(split) == 2 { - k, v := split[0], split[1] - env[k] = v - } - } - - var args []string - for _, arg := range cmd.Args { - quoted := strconv.Quote(arg) - if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") { - args = append(args, quoted) - } else { - args = append(args, arg) - } - } - return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " ")) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gocommand/vendor.go b/go/extractor/vendor/golang.org/x/tools/internal/gocommand/vendor.go deleted file mode 100644 index 2d3d408c0bed..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gocommand/vendor.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package gocommand - -import ( - "bytes" - "context" - "fmt" - "os" - "path/filepath" - "regexp" - "strings" - "time" - - "golang.org/x/mod/semver" -) - -// ModuleJSON holds information about a module. -type ModuleJSON struct { - Path string // module path - Version string // module version - Versions []string // available module versions (with -versions) - Replace *ModuleJSON // replaced by this module - Time *time.Time // time version was created - Update *ModuleJSON // available update, if any (with -u) - Main bool // is this the main module? - Indirect bool // is this module only an indirect dependency of main module? - Dir string // directory holding files for this module, if any - GoMod string // path to go.mod file used when loading this module, if any - GoVersion string // go version used in module -} - -var modFlagRegexp = regexp.MustCompile(`-mod[ =](\w+)`) - -// VendorEnabled reports whether vendoring is enabled. It takes a *Runner to execute Go commands -// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields, -// of which only Verb and Args are modified to run the appropriate Go command. -// Inspired by setDefaultBuildMod in modload/init.go -func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, *ModuleJSON, error) { - mainMod, go114, err := getMainModuleAnd114(ctx, inv, r) - if err != nil { - return false, nil, err - } - - // We check the GOFLAGS to see if there is anything overridden or not. - inv.Verb = "env" - inv.Args = []string{"GOFLAGS"} - stdout, err := r.Run(ctx, inv) - if err != nil { - return false, nil, err - } - goflags := string(bytes.TrimSpace(stdout.Bytes())) - matches := modFlagRegexp.FindStringSubmatch(goflags) - var modFlag string - if len(matches) != 0 { - modFlag = matches[1] - } - // Don't override an explicit '-mod=' argument. - if modFlag == "vendor" { - return true, mainMod, nil - } else if modFlag != "" { - return false, nil, nil - } - if mainMod == nil || !go114 { - return false, nil, nil - } - // Check 1.14's automatic vendor mode. - if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() { - if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 { - // The Go version is at least 1.14, and a vendor directory exists. - // Set -mod=vendor by default. - return true, mainMod, nil - } - } - return false, nil, nil -} - -// getMainModuleAnd114 gets one of the main modules' information and whether the -// go command in use is 1.14+. This is the information needed to figure out -// if vendoring should be enabled. -func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) { - const format = `{{.Path}} -{{.Dir}} -{{.GoMod}} -{{.GoVersion}} -{{range context.ReleaseTags}}{{if eq . "go1.14"}}{{.}}{{end}}{{end}} -` - inv.Verb = "list" - inv.Args = []string{"-m", "-f", format} - stdout, err := r.Run(ctx, inv) - if err != nil { - return nil, false, err - } - - lines := strings.Split(stdout.String(), "\n") - if len(lines) < 5 { - return nil, false, fmt.Errorf("unexpected stdout: %q", stdout.String()) - } - mod := &ModuleJSON{ - Path: lines[0], - Dir: lines[1], - GoMod: lines[2], - GoVersion: lines[3], - Main: true, - } - return mod, lines[4] == "go1.14", nil -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gocommand/version.go b/go/extractor/vendor/golang.org/x/tools/internal/gocommand/version.go deleted file mode 100644 index 446c5846a60f..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/gocommand/version.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package gocommand - -import ( - "context" - "fmt" - "regexp" - "strings" -) - -// GoVersion reports the minor version number of the highest release -// tag built into the go command on the PATH. -// -// Note that this may be higher than the version of the go tool used -// to build this application, and thus the versions of the standard -// go/{scanner,parser,ast,types} packages that are linked into it. -// In that case, callers should either downgrade to the version of -// go used to build the application, or report an error that the -// application is too old to use the go command on the PATH. -func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) { - inv.Verb = "list" - inv.Args = []string{"-e", "-f", `{{context.ReleaseTags}}`, `--`, `unsafe`} - inv.BuildFlags = nil // This is not a build command. - inv.ModFlag = "" - inv.ModFile = "" - inv.Env = append(inv.Env[:len(inv.Env):len(inv.Env)], "GO111MODULE=off") - - stdoutBytes, err := r.Run(ctx, inv) - if err != nil { - return 0, err - } - stdout := stdoutBytes.String() - if len(stdout) < 3 { - return 0, fmt.Errorf("bad ReleaseTags output: %q", stdout) - } - // Split up "[go1.1 go1.15]" and return highest go1.X value. - tags := strings.Fields(stdout[1 : len(stdout)-2]) - for i := len(tags) - 1; i >= 0; i-- { - var version int - if _, err := fmt.Sscanf(tags[i], "go1.%d", &version); err != nil { - continue - } - return version, nil - } - return 0, fmt.Errorf("no parseable ReleaseTags in %v", tags) -} - -// GoVersionOutput returns the complete output of the go version command. -func GoVersionOutput(ctx context.Context, inv Invocation, r *Runner) (string, error) { - inv.Verb = "version" - goVersion, err := r.Run(ctx, inv) - if err != nil { - return "", err - } - return goVersion.String(), nil -} - -// ParseGoVersionOutput extracts the Go version string -// from the output of the "go version" command. -// Given an unrecognized form, it returns an empty string. -func ParseGoVersionOutput(data string) string { - re := regexp.MustCompile(`^go version (go\S+|devel \S+)`) - m := re.FindStringSubmatch(data) - if len(m) != 2 { - return "" // unrecognized version - } - return m[1] -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/packagesinternal/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/packagesinternal/BUILD.bazel deleted file mode 100644 index 2d2b7dc5b33c..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/packagesinternal/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "packagesinternal", - srcs = ["packages.go"], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/packagesinternal", - importpath = "golang.org/x/tools/internal/packagesinternal", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/packagesinternal/packages.go b/go/extractor/vendor/golang.org/x/tools/internal/packagesinternal/packages.go deleted file mode 100644 index 44719de173bf..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/packagesinternal/packages.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package packagesinternal exposes internal-only fields from go/packages. -package packagesinternal - -var GetForTest = func(p interface{}) string { return "" } -var GetDepsErrors = func(p interface{}) []*PackageError { return nil } - -type PackageError struct { - ImportStack []string // shortest path from package named on command line to this one - Pos string // position of error (if present, file:line:col) - Err string // the error itself -} - -var TypecheckCgo int -var DepsErrors int // must be set as a LoadMode to call GetDepsErrors -var ForTest int // must be set as a LoadMode to call GetForTest - -var SetModFlag = func(config interface{}, value string) {} -var SetModFile = func(config interface{}, value string) {} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/BUILD.bazel deleted file mode 100644 index cce327470517..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/BUILD.bazel +++ /dev/null @@ -1,23 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "pkgbits", - srcs = [ - "codes.go", - "decoder.go", - "doc.go", - "encoder.go", - "flags.go", - "frames_go1.go", - "frames_go17.go", - "reloc.go", - "support.go", - "sync.go", - "syncmarker_string.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/pkgbits", - importpath = "golang.org/x/tools/internal/pkgbits", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/codes.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/codes.go deleted file mode 100644 index f0cabde96eba..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/codes.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgbits - -// A Code is an enum value that can be encoded into bitstreams. -// -// Code types are preferable for enum types, because they allow -// Decoder to detect desyncs. -type Code interface { - // Marker returns the SyncMarker for the Code's dynamic type. - Marker() SyncMarker - - // Value returns the Code's ordinal value. - Value() int -} - -// A CodeVal distinguishes among go/constant.Value encodings. -type CodeVal int - -func (c CodeVal) Marker() SyncMarker { return SyncVal } -func (c CodeVal) Value() int { return int(c) } - -// Note: These values are public and cannot be changed without -// updating the go/types importers. - -const ( - ValBool CodeVal = iota - ValString - ValInt64 - ValBigInt - ValBigRat - ValBigFloat -) - -// A CodeType distinguishes among go/types.Type encodings. -type CodeType int - -func (c CodeType) Marker() SyncMarker { return SyncType } -func (c CodeType) Value() int { return int(c) } - -// Note: These values are public and cannot be changed without -// updating the go/types importers. - -const ( - TypeBasic CodeType = iota - TypeNamed - TypePointer - TypeSlice - TypeArray - TypeChan - TypeMap - TypeSignature - TypeStruct - TypeInterface - TypeUnion - TypeTypeParam -) - -// A CodeObj distinguishes among go/types.Object encodings. -type CodeObj int - -func (c CodeObj) Marker() SyncMarker { return SyncCodeObj } -func (c CodeObj) Value() int { return int(c) } - -// Note: These values are public and cannot be changed without -// updating the go/types importers. - -const ( - ObjAlias CodeObj = iota - ObjConst - ObjType - ObjFunc - ObjVar - ObjStub -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/decoder.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/decoder.go deleted file mode 100644 index b92e8e6eb329..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/decoder.go +++ /dev/null @@ -1,517 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgbits - -import ( - "encoding/binary" - "errors" - "fmt" - "go/constant" - "go/token" - "io" - "math/big" - "os" - "runtime" - "strings" -) - -// A PkgDecoder provides methods for decoding a package's Unified IR -// export data. -type PkgDecoder struct { - // version is the file format version. - version uint32 - - // sync indicates whether the file uses sync markers. - sync bool - - // pkgPath is the package path for the package to be decoded. - // - // TODO(mdempsky): Remove; unneeded since CL 391014. - pkgPath string - - // elemData is the full data payload of the encoded package. - // Elements are densely and contiguously packed together. - // - // The last 8 bytes of elemData are the package fingerprint. - elemData string - - // elemEnds stores the byte-offset end positions of element - // bitstreams within elemData. - // - // For example, element I's bitstream data starts at elemEnds[I-1] - // (or 0, if I==0) and ends at elemEnds[I]. - // - // Note: elemEnds is indexed by absolute indices, not - // section-relative indices. - elemEnds []uint32 - - // elemEndsEnds stores the index-offset end positions of relocation - // sections within elemEnds. - // - // For example, section K's end positions start at elemEndsEnds[K-1] - // (or 0, if K==0) and end at elemEndsEnds[K]. - elemEndsEnds [numRelocs]uint32 - - scratchRelocEnt []RelocEnt -} - -// PkgPath returns the package path for the package -// -// TODO(mdempsky): Remove; unneeded since CL 391014. -func (pr *PkgDecoder) PkgPath() string { return pr.pkgPath } - -// SyncMarkers reports whether pr uses sync markers. -func (pr *PkgDecoder) SyncMarkers() bool { return pr.sync } - -// NewPkgDecoder returns a PkgDecoder initialized to read the Unified -// IR export data from input. pkgPath is the package path for the -// compilation unit that produced the export data. -// -// TODO(mdempsky): Remove pkgPath parameter; unneeded since CL 391014. -func NewPkgDecoder(pkgPath, input string) PkgDecoder { - pr := PkgDecoder{ - pkgPath: pkgPath, - } - - // TODO(mdempsky): Implement direct indexing of input string to - // avoid copying the position information. - - r := strings.NewReader(input) - - assert(binary.Read(r, binary.LittleEndian, &pr.version) == nil) - - switch pr.version { - default: - panic(fmt.Errorf("unsupported version: %v", pr.version)) - case 0: - // no flags - case 1: - var flags uint32 - assert(binary.Read(r, binary.LittleEndian, &flags) == nil) - pr.sync = flags&flagSyncMarkers != 0 - } - - assert(binary.Read(r, binary.LittleEndian, pr.elemEndsEnds[:]) == nil) - - pr.elemEnds = make([]uint32, pr.elemEndsEnds[len(pr.elemEndsEnds)-1]) - assert(binary.Read(r, binary.LittleEndian, pr.elemEnds[:]) == nil) - - pos, err := r.Seek(0, io.SeekCurrent) - assert(err == nil) - - pr.elemData = input[pos:] - assert(len(pr.elemData)-8 == int(pr.elemEnds[len(pr.elemEnds)-1])) - - return pr -} - -// NumElems returns the number of elements in section k. -func (pr *PkgDecoder) NumElems(k RelocKind) int { - count := int(pr.elemEndsEnds[k]) - if k > 0 { - count -= int(pr.elemEndsEnds[k-1]) - } - return count -} - -// TotalElems returns the total number of elements across all sections. -func (pr *PkgDecoder) TotalElems() int { - return len(pr.elemEnds) -} - -// Fingerprint returns the package fingerprint. -func (pr *PkgDecoder) Fingerprint() [8]byte { - var fp [8]byte - copy(fp[:], pr.elemData[len(pr.elemData)-8:]) - return fp -} - -// AbsIdx returns the absolute index for the given (section, index) -// pair. -func (pr *PkgDecoder) AbsIdx(k RelocKind, idx Index) int { - absIdx := int(idx) - if k > 0 { - absIdx += int(pr.elemEndsEnds[k-1]) - } - if absIdx >= int(pr.elemEndsEnds[k]) { - errorf("%v:%v is out of bounds; %v", k, idx, pr.elemEndsEnds) - } - return absIdx -} - -// DataIdx returns the raw element bitstream for the given (section, -// index) pair. -func (pr *PkgDecoder) DataIdx(k RelocKind, idx Index) string { - absIdx := pr.AbsIdx(k, idx) - - var start uint32 - if absIdx > 0 { - start = pr.elemEnds[absIdx-1] - } - end := pr.elemEnds[absIdx] - - return pr.elemData[start:end] -} - -// StringIdx returns the string value for the given string index. -func (pr *PkgDecoder) StringIdx(idx Index) string { - return pr.DataIdx(RelocString, idx) -} - -// NewDecoder returns a Decoder for the given (section, index) pair, -// and decodes the given SyncMarker from the element bitstream. -func (pr *PkgDecoder) NewDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder { - r := pr.NewDecoderRaw(k, idx) - r.Sync(marker) - return r -} - -// TempDecoder returns a Decoder for the given (section, index) pair, -// and decodes the given SyncMarker from the element bitstream. -// If possible the Decoder should be RetireDecoder'd when it is no longer -// needed, this will avoid heap allocations. -func (pr *PkgDecoder) TempDecoder(k RelocKind, idx Index, marker SyncMarker) Decoder { - r := pr.TempDecoderRaw(k, idx) - r.Sync(marker) - return r -} - -func (pr *PkgDecoder) RetireDecoder(d *Decoder) { - pr.scratchRelocEnt = d.Relocs - d.Relocs = nil -} - -// NewDecoderRaw returns a Decoder for the given (section, index) pair. -// -// Most callers should use NewDecoder instead. -func (pr *PkgDecoder) NewDecoderRaw(k RelocKind, idx Index) Decoder { - r := Decoder{ - common: pr, - k: k, - Idx: idx, - } - - // TODO(mdempsky) r.data.Reset(...) after #44505 is resolved. - r.Data = *strings.NewReader(pr.DataIdx(k, idx)) - - r.Sync(SyncRelocs) - r.Relocs = make([]RelocEnt, r.Len()) - for i := range r.Relocs { - r.Sync(SyncReloc) - r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())} - } - - return r -} - -func (pr *PkgDecoder) TempDecoderRaw(k RelocKind, idx Index) Decoder { - r := Decoder{ - common: pr, - k: k, - Idx: idx, - } - - r.Data.Reset(pr.DataIdx(k, idx)) - r.Sync(SyncRelocs) - l := r.Len() - if cap(pr.scratchRelocEnt) >= l { - r.Relocs = pr.scratchRelocEnt[:l] - pr.scratchRelocEnt = nil - } else { - r.Relocs = make([]RelocEnt, l) - } - for i := range r.Relocs { - r.Sync(SyncReloc) - r.Relocs[i] = RelocEnt{RelocKind(r.Len()), Index(r.Len())} - } - - return r -} - -// A Decoder provides methods for decoding an individual element's -// bitstream data. -type Decoder struct { - common *PkgDecoder - - Relocs []RelocEnt - Data strings.Reader - - k RelocKind - Idx Index -} - -func (r *Decoder) checkErr(err error) { - if err != nil { - errorf("unexpected decoding error: %w", err) - } -} - -func (r *Decoder) rawUvarint() uint64 { - x, err := readUvarint(&r.Data) - r.checkErr(err) - return x -} - -// readUvarint is a type-specialized copy of encoding/binary.ReadUvarint. -// This avoids the interface conversion and thus has better escape properties, -// which flows up the stack. -func readUvarint(r *strings.Reader) (uint64, error) { - var x uint64 - var s uint - for i := 0; i < binary.MaxVarintLen64; i++ { - b, err := r.ReadByte() - if err != nil { - if i > 0 && err == io.EOF { - err = io.ErrUnexpectedEOF - } - return x, err - } - if b < 0x80 { - if i == binary.MaxVarintLen64-1 && b > 1 { - return x, overflow - } - return x | uint64(b)<> 1) - if ux&1 != 0 { - x = ^x - } - return x -} - -func (r *Decoder) rawReloc(k RelocKind, idx int) Index { - e := r.Relocs[idx] - assert(e.Kind == k) - return e.Idx -} - -// Sync decodes a sync marker from the element bitstream and asserts -// that it matches the expected marker. -// -// If r.common.sync is false, then Sync is a no-op. -func (r *Decoder) Sync(mWant SyncMarker) { - if !r.common.sync { - return - } - - pos, _ := r.Data.Seek(0, io.SeekCurrent) - mHave := SyncMarker(r.rawUvarint()) - writerPCs := make([]int, r.rawUvarint()) - for i := range writerPCs { - writerPCs[i] = int(r.rawUvarint()) - } - - if mHave == mWant { - return - } - - // There's some tension here between printing: - // - // (1) full file paths that tools can recognize (e.g., so emacs - // hyperlinks the "file:line" text for easy navigation), or - // - // (2) short file paths that are easier for humans to read (e.g., by - // omitting redundant or irrelevant details, so it's easier to - // focus on the useful bits that remain). - // - // The current formatting favors the former, as it seems more - // helpful in practice. But perhaps the formatting could be improved - // to better address both concerns. For example, use relative file - // paths if they would be shorter, or rewrite file paths to contain - // "$GOROOT" (like objabi.AbsFile does) if tools can be taught how - // to reliably expand that again. - - fmt.Printf("export data desync: package %q, section %v, index %v, offset %v\n", r.common.pkgPath, r.k, r.Idx, pos) - - fmt.Printf("\nfound %v, written at:\n", mHave) - if len(writerPCs) == 0 { - fmt.Printf("\t[stack trace unavailable; recompile package %q with -d=syncframes]\n", r.common.pkgPath) - } - for _, pc := range writerPCs { - fmt.Printf("\t%s\n", r.common.StringIdx(r.rawReloc(RelocString, pc))) - } - - fmt.Printf("\nexpected %v, reading at:\n", mWant) - var readerPCs [32]uintptr // TODO(mdempsky): Dynamically size? - n := runtime.Callers(2, readerPCs[:]) - for _, pc := range fmtFrames(readerPCs[:n]...) { - fmt.Printf("\t%s\n", pc) - } - - // We already printed a stack trace for the reader, so now we can - // simply exit. Printing a second one with panic or base.Fatalf - // would just be noise. - os.Exit(1) -} - -// Bool decodes and returns a bool value from the element bitstream. -func (r *Decoder) Bool() bool { - r.Sync(SyncBool) - x, err := r.Data.ReadByte() - r.checkErr(err) - assert(x < 2) - return x != 0 -} - -// Int64 decodes and returns an int64 value from the element bitstream. -func (r *Decoder) Int64() int64 { - r.Sync(SyncInt64) - return r.rawVarint() -} - -// Uint64 decodes and returns a uint64 value from the element bitstream. -func (r *Decoder) Uint64() uint64 { - r.Sync(SyncUint64) - return r.rawUvarint() -} - -// Len decodes and returns a non-negative int value from the element bitstream. -func (r *Decoder) Len() int { x := r.Uint64(); v := int(x); assert(uint64(v) == x); return v } - -// Int decodes and returns an int value from the element bitstream. -func (r *Decoder) Int() int { x := r.Int64(); v := int(x); assert(int64(v) == x); return v } - -// Uint decodes and returns a uint value from the element bitstream. -func (r *Decoder) Uint() uint { x := r.Uint64(); v := uint(x); assert(uint64(v) == x); return v } - -// Code decodes a Code value from the element bitstream and returns -// its ordinal value. It's the caller's responsibility to convert the -// result to an appropriate Code type. -// -// TODO(mdempsky): Ideally this method would have signature "Code[T -// Code] T" instead, but we don't allow generic methods and the -// compiler can't depend on generics yet anyway. -func (r *Decoder) Code(mark SyncMarker) int { - r.Sync(mark) - return r.Len() -} - -// Reloc decodes a relocation of expected section k from the element -// bitstream and returns an index to the referenced element. -func (r *Decoder) Reloc(k RelocKind) Index { - r.Sync(SyncUseReloc) - return r.rawReloc(k, r.Len()) -} - -// String decodes and returns a string value from the element -// bitstream. -func (r *Decoder) String() string { - r.Sync(SyncString) - return r.common.StringIdx(r.Reloc(RelocString)) -} - -// Strings decodes and returns a variable-length slice of strings from -// the element bitstream. -func (r *Decoder) Strings() []string { - res := make([]string, r.Len()) - for i := range res { - res[i] = r.String() - } - return res -} - -// Value decodes and returns a constant.Value from the element -// bitstream. -func (r *Decoder) Value() constant.Value { - r.Sync(SyncValue) - isComplex := r.Bool() - val := r.scalar() - if isComplex { - val = constant.BinaryOp(val, token.ADD, constant.MakeImag(r.scalar())) - } - return val -} - -func (r *Decoder) scalar() constant.Value { - switch tag := CodeVal(r.Code(SyncVal)); tag { - default: - panic(fmt.Errorf("unexpected scalar tag: %v", tag)) - - case ValBool: - return constant.MakeBool(r.Bool()) - case ValString: - return constant.MakeString(r.String()) - case ValInt64: - return constant.MakeInt64(r.Int64()) - case ValBigInt: - return constant.Make(r.bigInt()) - case ValBigRat: - num := r.bigInt() - denom := r.bigInt() - return constant.Make(new(big.Rat).SetFrac(num, denom)) - case ValBigFloat: - return constant.Make(r.bigFloat()) - } -} - -func (r *Decoder) bigInt() *big.Int { - v := new(big.Int).SetBytes([]byte(r.String())) - if r.Bool() { - v.Neg(v) - } - return v -} - -func (r *Decoder) bigFloat() *big.Float { - v := new(big.Float).SetPrec(512) - assert(v.UnmarshalText([]byte(r.String())) == nil) - return v -} - -// @@@ Helpers - -// TODO(mdempsky): These should probably be removed. I think they're a -// smell that the export data format is not yet quite right. - -// PeekPkgPath returns the package path for the specified package -// index. -func (pr *PkgDecoder) PeekPkgPath(idx Index) string { - var path string - { - r := pr.TempDecoder(RelocPkg, idx, SyncPkgDef) - path = r.String() - pr.RetireDecoder(&r) - } - if path == "" { - path = pr.pkgPath - } - return path -} - -// PeekObj returns the package path, object name, and CodeObj for the -// specified object index. -func (pr *PkgDecoder) PeekObj(idx Index) (string, string, CodeObj) { - var ridx Index - var name string - var rcode int - { - r := pr.TempDecoder(RelocName, idx, SyncObject1) - r.Sync(SyncSym) - r.Sync(SyncPkg) - ridx = r.Reloc(RelocPkg) - name = r.String() - rcode = r.Code(SyncCodeObj) - pr.RetireDecoder(&r) - } - - path := pr.PeekPkgPath(ridx) - assert(name != "") - - tag := CodeObj(rcode) - - return path, name, tag -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/doc.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/doc.go deleted file mode 100644 index c8a2796b5e4c..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/doc.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package pkgbits implements low-level coding abstractions for -// Unified IR's export data format. -// -// At a low-level, a package is a collection of bitstream elements. -// Each element has a "kind" and a dense, non-negative index. -// Elements can be randomly accessed given their kind and index. -// -// Individual elements are sequences of variable-length values (e.g., -// integers, booleans, strings, go/constant values, cross-references -// to other elements). Package pkgbits provides APIs for encoding and -// decoding these low-level values, but the details of mapping -// higher-level Go constructs into elements is left to higher-level -// abstractions. -// -// Elements may cross-reference each other with "relocations." For -// example, an element representing a pointer type has a relocation -// referring to the element type. -// -// Go constructs may be composed as a constellation of multiple -// elements. For example, a declared function may have one element to -// describe the object (e.g., its name, type, position), and a -// separate element to describe its function body. This allows readers -// some flexibility in efficiently seeking or re-reading data (e.g., -// inlining requires re-reading the function body for each inlined -// call, without needing to re-read the object-level details). -// -// This is a copy of internal/pkgbits in the Go implementation. -package pkgbits diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/encoder.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/encoder.go deleted file mode 100644 index 6482617a4fcc..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/encoder.go +++ /dev/null @@ -1,383 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgbits - -import ( - "bytes" - "crypto/md5" - "encoding/binary" - "go/constant" - "io" - "math/big" - "runtime" -) - -// currentVersion is the current version number. -// -// - v0: initial prototype -// -// - v1: adds the flags uint32 word -const currentVersion uint32 = 1 - -// A PkgEncoder provides methods for encoding a package's Unified IR -// export data. -type PkgEncoder struct { - // elems holds the bitstream for previously encoded elements. - elems [numRelocs][]string - - // stringsIdx maps previously encoded strings to their index within - // the RelocString section, to allow deduplication. That is, - // elems[RelocString][stringsIdx[s]] == s (if present). - stringsIdx map[string]Index - - // syncFrames is the number of frames to write at each sync - // marker. A negative value means sync markers are omitted. - syncFrames int -} - -// SyncMarkers reports whether pw uses sync markers. -func (pw *PkgEncoder) SyncMarkers() bool { return pw.syncFrames >= 0 } - -// NewPkgEncoder returns an initialized PkgEncoder. -// -// syncFrames is the number of caller frames that should be serialized -// at Sync points. Serializing additional frames results in larger -// export data files, but can help diagnosing desync errors in -// higher-level Unified IR reader/writer code. If syncFrames is -// negative, then sync markers are omitted entirely. -func NewPkgEncoder(syncFrames int) PkgEncoder { - return PkgEncoder{ - stringsIdx: make(map[string]Index), - syncFrames: syncFrames, - } -} - -// DumpTo writes the package's encoded data to out0 and returns the -// package fingerprint. -func (pw *PkgEncoder) DumpTo(out0 io.Writer) (fingerprint [8]byte) { - h := md5.New() - out := io.MultiWriter(out0, h) - - writeUint32 := func(x uint32) { - assert(binary.Write(out, binary.LittleEndian, x) == nil) - } - - writeUint32(currentVersion) - - var flags uint32 - if pw.SyncMarkers() { - flags |= flagSyncMarkers - } - writeUint32(flags) - - // Write elemEndsEnds. - var sum uint32 - for _, elems := range &pw.elems { - sum += uint32(len(elems)) - writeUint32(sum) - } - - // Write elemEnds. - sum = 0 - for _, elems := range &pw.elems { - for _, elem := range elems { - sum += uint32(len(elem)) - writeUint32(sum) - } - } - - // Write elemData. - for _, elems := range &pw.elems { - for _, elem := range elems { - _, err := io.WriteString(out, elem) - assert(err == nil) - } - } - - // Write fingerprint. - copy(fingerprint[:], h.Sum(nil)) - _, err := out0.Write(fingerprint[:]) - assert(err == nil) - - return -} - -// StringIdx adds a string value to the strings section, if not -// already present, and returns its index. -func (pw *PkgEncoder) StringIdx(s string) Index { - if idx, ok := pw.stringsIdx[s]; ok { - assert(pw.elems[RelocString][idx] == s) - return idx - } - - idx := Index(len(pw.elems[RelocString])) - pw.elems[RelocString] = append(pw.elems[RelocString], s) - pw.stringsIdx[s] = idx - return idx -} - -// NewEncoder returns an Encoder for a new element within the given -// section, and encodes the given SyncMarker as the start of the -// element bitstream. -func (pw *PkgEncoder) NewEncoder(k RelocKind, marker SyncMarker) Encoder { - e := pw.NewEncoderRaw(k) - e.Sync(marker) - return e -} - -// NewEncoderRaw returns an Encoder for a new element within the given -// section. -// -// Most callers should use NewEncoder instead. -func (pw *PkgEncoder) NewEncoderRaw(k RelocKind) Encoder { - idx := Index(len(pw.elems[k])) - pw.elems[k] = append(pw.elems[k], "") // placeholder - - return Encoder{ - p: pw, - k: k, - Idx: idx, - } -} - -// An Encoder provides methods for encoding an individual element's -// bitstream data. -type Encoder struct { - p *PkgEncoder - - Relocs []RelocEnt - RelocMap map[RelocEnt]uint32 - Data bytes.Buffer // accumulated element bitstream data - - encodingRelocHeader bool - - k RelocKind - Idx Index // index within relocation section -} - -// Flush finalizes the element's bitstream and returns its Index. -func (w *Encoder) Flush() Index { - var sb bytes.Buffer // TODO(mdempsky): strings.Builder after #44505 is resolved - - // Backup the data so we write the relocations at the front. - var tmp bytes.Buffer - io.Copy(&tmp, &w.Data) - - // TODO(mdempsky): Consider writing these out separately so they're - // easier to strip, along with function bodies, so that we can prune - // down to just the data that's relevant to go/types. - if w.encodingRelocHeader { - panic("encodingRelocHeader already true; recursive flush?") - } - w.encodingRelocHeader = true - w.Sync(SyncRelocs) - w.Len(len(w.Relocs)) - for _, rEnt := range w.Relocs { - w.Sync(SyncReloc) - w.Len(int(rEnt.Kind)) - w.Len(int(rEnt.Idx)) - } - - io.Copy(&sb, &w.Data) - io.Copy(&sb, &tmp) - w.p.elems[w.k][w.Idx] = sb.String() - - return w.Idx -} - -func (w *Encoder) checkErr(err error) { - if err != nil { - errorf("unexpected encoding error: %v", err) - } -} - -func (w *Encoder) rawUvarint(x uint64) { - var buf [binary.MaxVarintLen64]byte - n := binary.PutUvarint(buf[:], x) - _, err := w.Data.Write(buf[:n]) - w.checkErr(err) -} - -func (w *Encoder) rawVarint(x int64) { - // Zig-zag encode. - ux := uint64(x) << 1 - if x < 0 { - ux = ^ux - } - - w.rawUvarint(ux) -} - -func (w *Encoder) rawReloc(r RelocKind, idx Index) int { - e := RelocEnt{r, idx} - if w.RelocMap != nil { - if i, ok := w.RelocMap[e]; ok { - return int(i) - } - } else { - w.RelocMap = make(map[RelocEnt]uint32) - } - - i := len(w.Relocs) - w.RelocMap[e] = uint32(i) - w.Relocs = append(w.Relocs, e) - return i -} - -func (w *Encoder) Sync(m SyncMarker) { - if !w.p.SyncMarkers() { - return - } - - // Writing out stack frame string references requires working - // relocations, but writing out the relocations themselves involves - // sync markers. To prevent infinite recursion, we simply trim the - // stack frame for sync markers within the relocation header. - var frames []string - if !w.encodingRelocHeader && w.p.syncFrames > 0 { - pcs := make([]uintptr, w.p.syncFrames) - n := runtime.Callers(2, pcs) - frames = fmtFrames(pcs[:n]...) - } - - // TODO(mdempsky): Save space by writing out stack frames as a - // linked list so we can share common stack frames. - w.rawUvarint(uint64(m)) - w.rawUvarint(uint64(len(frames))) - for _, frame := range frames { - w.rawUvarint(uint64(w.rawReloc(RelocString, w.p.StringIdx(frame)))) - } -} - -// Bool encodes and writes a bool value into the element bitstream, -// and then returns the bool value. -// -// For simple, 2-alternative encodings, the idiomatic way to call Bool -// is something like: -// -// if w.Bool(x != 0) { -// // alternative #1 -// } else { -// // alternative #2 -// } -// -// For multi-alternative encodings, use Code instead. -func (w *Encoder) Bool(b bool) bool { - w.Sync(SyncBool) - var x byte - if b { - x = 1 - } - err := w.Data.WriteByte(x) - w.checkErr(err) - return b -} - -// Int64 encodes and writes an int64 value into the element bitstream. -func (w *Encoder) Int64(x int64) { - w.Sync(SyncInt64) - w.rawVarint(x) -} - -// Uint64 encodes and writes a uint64 value into the element bitstream. -func (w *Encoder) Uint64(x uint64) { - w.Sync(SyncUint64) - w.rawUvarint(x) -} - -// Len encodes and writes a non-negative int value into the element bitstream. -func (w *Encoder) Len(x int) { assert(x >= 0); w.Uint64(uint64(x)) } - -// Int encodes and writes an int value into the element bitstream. -func (w *Encoder) Int(x int) { w.Int64(int64(x)) } - -// Uint encodes and writes a uint value into the element bitstream. -func (w *Encoder) Uint(x uint) { w.Uint64(uint64(x)) } - -// Reloc encodes and writes a relocation for the given (section, -// index) pair into the element bitstream. -// -// Note: Only the index is formally written into the element -// bitstream, so bitstream decoders must know from context which -// section an encoded relocation refers to. -func (w *Encoder) Reloc(r RelocKind, idx Index) { - w.Sync(SyncUseReloc) - w.Len(w.rawReloc(r, idx)) -} - -// Code encodes and writes a Code value into the element bitstream. -func (w *Encoder) Code(c Code) { - w.Sync(c.Marker()) - w.Len(c.Value()) -} - -// String encodes and writes a string value into the element -// bitstream. -// -// Internally, strings are deduplicated by adding them to the strings -// section (if not already present), and then writing a relocation -// into the element bitstream. -func (w *Encoder) String(s string) { - w.Sync(SyncString) - w.Reloc(RelocString, w.p.StringIdx(s)) -} - -// Strings encodes and writes a variable-length slice of strings into -// the element bitstream. -func (w *Encoder) Strings(ss []string) { - w.Len(len(ss)) - for _, s := range ss { - w.String(s) - } -} - -// Value encodes and writes a constant.Value into the element -// bitstream. -func (w *Encoder) Value(val constant.Value) { - w.Sync(SyncValue) - if w.Bool(val.Kind() == constant.Complex) { - w.scalar(constant.Real(val)) - w.scalar(constant.Imag(val)) - } else { - w.scalar(val) - } -} - -func (w *Encoder) scalar(val constant.Value) { - switch v := constant.Val(val).(type) { - default: - errorf("unhandled %v (%v)", val, val.Kind()) - case bool: - w.Code(ValBool) - w.Bool(v) - case string: - w.Code(ValString) - w.String(v) - case int64: - w.Code(ValInt64) - w.Int64(v) - case *big.Int: - w.Code(ValBigInt) - w.bigInt(v) - case *big.Rat: - w.Code(ValBigRat) - w.bigInt(v.Num()) - w.bigInt(v.Denom()) - case *big.Float: - w.Code(ValBigFloat) - w.bigFloat(v) - } -} - -func (w *Encoder) bigInt(v *big.Int) { - b := v.Bytes() - w.String(string(b)) // TODO: More efficient encoding. - w.Bool(v.Sign() < 0) -} - -func (w *Encoder) bigFloat(v *big.Float) { - b := v.Append(nil, 'p', -1) - w.String(string(b)) // TODO: More efficient encoding. -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/flags.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/flags.go deleted file mode 100644 index 654222745fac..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/flags.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgbits - -const ( - flagSyncMarkers = 1 << iota // file format contains sync markers -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/frames_go1.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/frames_go1.go deleted file mode 100644 index 5294f6a63edd..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/frames_go1.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.7 -// +build !go1.7 - -// TODO(mdempsky): Remove after #44505 is resolved - -package pkgbits - -import "runtime" - -func walkFrames(pcs []uintptr, visit frameVisitor) { - for _, pc := range pcs { - fn := runtime.FuncForPC(pc) - file, line := fn.FileLine(pc) - - visit(file, line, fn.Name(), pc-fn.Entry()) - } -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/frames_go17.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/frames_go17.go deleted file mode 100644 index 2324ae7adfe2..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/frames_go17.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.7 -// +build go1.7 - -package pkgbits - -import "runtime" - -// walkFrames calls visit for each call frame represented by pcs. -// -// pcs should be a slice of PCs, as returned by runtime.Callers. -func walkFrames(pcs []uintptr, visit frameVisitor) { - if len(pcs) == 0 { - return - } - - frames := runtime.CallersFrames(pcs) - for { - frame, more := frames.Next() - visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry) - if !more { - return - } - } -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/reloc.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/reloc.go deleted file mode 100644 index fcdfb97ca992..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/reloc.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgbits - -// A RelocKind indicates a particular section within a unified IR export. -type RelocKind int32 - -// An Index represents a bitstream element index within a particular -// section. -type Index int32 - -// A relocEnt (relocation entry) is an entry in an element's local -// reference table. -// -// TODO(mdempsky): Rename this too. -type RelocEnt struct { - Kind RelocKind - Idx Index -} - -// Reserved indices within the meta relocation section. -const ( - PublicRootIdx Index = 0 - PrivateRootIdx Index = 1 -) - -const ( - RelocString RelocKind = iota - RelocMeta - RelocPosBase - RelocPkg - RelocName - RelocType - RelocObj - RelocObjExt - RelocObjDict - RelocBody - - numRelocs = iota -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/support.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/support.go deleted file mode 100644 index ad26d3b28cae..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/support.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgbits - -import "fmt" - -func assert(b bool) { - if !b { - panic("assertion failed") - } -} - -func errorf(format string, args ...interface{}) { - panic(fmt.Errorf(format, args...)) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/sync.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/sync.go deleted file mode 100644 index 5bd51ef71700..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/sync.go +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkgbits - -import ( - "fmt" - "strings" -) - -// fmtFrames formats a backtrace for reporting reader/writer desyncs. -func fmtFrames(pcs ...uintptr) []string { - res := make([]string, 0, len(pcs)) - walkFrames(pcs, func(file string, line int, name string, offset uintptr) { - // Trim package from function name. It's just redundant noise. - name = strings.TrimPrefix(name, "cmd/compile/internal/noder.") - - res = append(res, fmt.Sprintf("%s:%v: %s +0x%v", file, line, name, offset)) - }) - return res -} - -type frameVisitor func(file string, line int, name string, offset uintptr) - -// SyncMarker is an enum type that represents markers that may be -// written to export data to ensure the reader and writer stay -// synchronized. -type SyncMarker int - -//go:generate stringer -type=SyncMarker -trimprefix=Sync - -const ( - _ SyncMarker = iota - - // Public markers (known to go/types importers). - - // Low-level coding markers. - SyncEOF - SyncBool - SyncInt64 - SyncUint64 - SyncString - SyncValue - SyncVal - SyncRelocs - SyncReloc - SyncUseReloc - - // Higher-level object and type markers. - SyncPublic - SyncPos - SyncPosBase - SyncObject - SyncObject1 - SyncPkg - SyncPkgDef - SyncMethod - SyncType - SyncTypeIdx - SyncTypeParamNames - SyncSignature - SyncParams - SyncParam - SyncCodeObj - SyncSym - SyncLocalIdent - SyncSelector - - // Private markers (only known to cmd/compile). - SyncPrivate - - SyncFuncExt - SyncVarExt - SyncTypeExt - SyncPragma - - SyncExprList - SyncExprs - SyncExpr - SyncExprType - SyncAssign - SyncOp - SyncFuncLit - SyncCompLit - - SyncDecl - SyncFuncBody - SyncOpenScope - SyncCloseScope - SyncCloseAnotherScope - SyncDeclNames - SyncDeclName - - SyncStmts - SyncBlockStmt - SyncIfStmt - SyncForStmt - SyncSwitchStmt - SyncRangeStmt - SyncCaseClause - SyncCommClause - SyncSelectStmt - SyncDecls - SyncLabeledStmt - SyncUseObjLocal - SyncAddLocal - SyncLinkname - SyncStmt1 - SyncStmtsEnd - SyncLabel - SyncOptLabel -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go b/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go deleted file mode 100644 index 4a5b0ca5f2ff..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.go +++ /dev/null @@ -1,89 +0,0 @@ -// Code generated by "stringer -type=SyncMarker -trimprefix=Sync"; DO NOT EDIT. - -package pkgbits - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[SyncEOF-1] - _ = x[SyncBool-2] - _ = x[SyncInt64-3] - _ = x[SyncUint64-4] - _ = x[SyncString-5] - _ = x[SyncValue-6] - _ = x[SyncVal-7] - _ = x[SyncRelocs-8] - _ = x[SyncReloc-9] - _ = x[SyncUseReloc-10] - _ = x[SyncPublic-11] - _ = x[SyncPos-12] - _ = x[SyncPosBase-13] - _ = x[SyncObject-14] - _ = x[SyncObject1-15] - _ = x[SyncPkg-16] - _ = x[SyncPkgDef-17] - _ = x[SyncMethod-18] - _ = x[SyncType-19] - _ = x[SyncTypeIdx-20] - _ = x[SyncTypeParamNames-21] - _ = x[SyncSignature-22] - _ = x[SyncParams-23] - _ = x[SyncParam-24] - _ = x[SyncCodeObj-25] - _ = x[SyncSym-26] - _ = x[SyncLocalIdent-27] - _ = x[SyncSelector-28] - _ = x[SyncPrivate-29] - _ = x[SyncFuncExt-30] - _ = x[SyncVarExt-31] - _ = x[SyncTypeExt-32] - _ = x[SyncPragma-33] - _ = x[SyncExprList-34] - _ = x[SyncExprs-35] - _ = x[SyncExpr-36] - _ = x[SyncExprType-37] - _ = x[SyncAssign-38] - _ = x[SyncOp-39] - _ = x[SyncFuncLit-40] - _ = x[SyncCompLit-41] - _ = x[SyncDecl-42] - _ = x[SyncFuncBody-43] - _ = x[SyncOpenScope-44] - _ = x[SyncCloseScope-45] - _ = x[SyncCloseAnotherScope-46] - _ = x[SyncDeclNames-47] - _ = x[SyncDeclName-48] - _ = x[SyncStmts-49] - _ = x[SyncBlockStmt-50] - _ = x[SyncIfStmt-51] - _ = x[SyncForStmt-52] - _ = x[SyncSwitchStmt-53] - _ = x[SyncRangeStmt-54] - _ = x[SyncCaseClause-55] - _ = x[SyncCommClause-56] - _ = x[SyncSelectStmt-57] - _ = x[SyncDecls-58] - _ = x[SyncLabeledStmt-59] - _ = x[SyncUseObjLocal-60] - _ = x[SyncAddLocal-61] - _ = x[SyncLinkname-62] - _ = x[SyncStmt1-63] - _ = x[SyncStmtsEnd-64] - _ = x[SyncLabel-65] - _ = x[SyncOptLabel-66] -} - -const _SyncMarker_name = "EOFBoolInt64Uint64StringValueValRelocsRelocUseRelocPublicPosPosBaseObjectObject1PkgPkgDefMethodTypeTypeIdxTypeParamNamesSignatureParamsParamCodeObjSymLocalIdentSelectorPrivateFuncExtVarExtTypeExtPragmaExprListExprsExprExprTypeAssignOpFuncLitCompLitDeclFuncBodyOpenScopeCloseScopeCloseAnotherScopeDeclNamesDeclNameStmtsBlockStmtIfStmtForStmtSwitchStmtRangeStmtCaseClauseCommClauseSelectStmtDeclsLabeledStmtUseObjLocalAddLocalLinknameStmt1StmtsEndLabelOptLabel" - -var _SyncMarker_index = [...]uint16{0, 3, 7, 12, 18, 24, 29, 32, 38, 43, 51, 57, 60, 67, 73, 80, 83, 89, 95, 99, 106, 120, 129, 135, 140, 147, 150, 160, 168, 175, 182, 188, 195, 201, 209, 214, 218, 226, 232, 234, 241, 248, 252, 260, 269, 279, 296, 305, 313, 318, 327, 333, 340, 350, 359, 369, 379, 389, 394, 405, 416, 424, 432, 437, 445, 450, 458} - -func (i SyncMarker) String() string { - i -= 1 - if i < 0 || i >= SyncMarker(len(_SyncMarker_index)-1) { - return "SyncMarker(" + strconv.FormatInt(int64(i+1), 10) + ")" - } - return _SyncMarker_name[_SyncMarker_index[i]:_SyncMarker_index[i+1]] -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/tokeninternal/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/tokeninternal/BUILD.bazel deleted file mode 100644 index c0f6cc8fb13a..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/tokeninternal/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "tokeninternal", - srcs = ["tokeninternal.go"], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/tokeninternal", - importpath = "golang.org/x/tools/internal/tokeninternal", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go b/go/extractor/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go deleted file mode 100644 index 7e638ec24fcb..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// package tokeninternal provides access to some internal features of the token -// package. -package tokeninternal - -import ( - "fmt" - "go/token" - "sort" - "sync" - "unsafe" -) - -// GetLines returns the table of line-start offsets from a token.File. -func GetLines(file *token.File) []int { - // token.File has a Lines method on Go 1.21 and later. - if file, ok := (interface{})(file).(interface{ Lines() []int }); ok { - return file.Lines() - } - - // This declaration must match that of token.File. - // This creates a risk of dependency skew. - // For now we check that the size of the two - // declarations is the same, on the (fragile) assumption - // that future changes would add fields. - type tokenFile119 struct { - _ string - _ int - _ int - mu sync.Mutex // we're not complete monsters - lines []int - _ []struct{} - } - type tokenFile118 struct { - _ *token.FileSet // deleted in go1.19 - tokenFile119 - } - - type uP = unsafe.Pointer - switch unsafe.Sizeof(*file) { - case unsafe.Sizeof(tokenFile118{}): - var ptr *tokenFile118 - *(*uP)(uP(&ptr)) = uP(file) - ptr.mu.Lock() - defer ptr.mu.Unlock() - return ptr.lines - - case unsafe.Sizeof(tokenFile119{}): - var ptr *tokenFile119 - *(*uP)(uP(&ptr)) = uP(file) - ptr.mu.Lock() - defer ptr.mu.Unlock() - return ptr.lines - - default: - panic("unexpected token.File size") - } -} - -// AddExistingFiles adds the specified files to the FileSet if they -// are not already present. It panics if any pair of files in the -// resulting FileSet would overlap. -func AddExistingFiles(fset *token.FileSet, files []*token.File) { - // Punch through the FileSet encapsulation. - type tokenFileSet struct { - // This type remained essentially consistent from go1.16 to go1.21. - mutex sync.RWMutex - base int - files []*token.File - _ *token.File // changed to atomic.Pointer[token.File] in go1.19 - } - - // If the size of token.FileSet changes, this will fail to compile. - const delta = int64(unsafe.Sizeof(tokenFileSet{})) - int64(unsafe.Sizeof(token.FileSet{})) - var _ [-delta * delta]int - - type uP = unsafe.Pointer - var ptr *tokenFileSet - *(*uP)(uP(&ptr)) = uP(fset) - ptr.mutex.Lock() - defer ptr.mutex.Unlock() - - // Merge and sort. - newFiles := append(ptr.files, files...) - sort.Slice(newFiles, func(i, j int) bool { - return newFiles[i].Base() < newFiles[j].Base() - }) - - // Reject overlapping files. - // Discard adjacent identical files. - out := newFiles[:0] - for i, file := range newFiles { - if i > 0 { - prev := newFiles[i-1] - if file == prev { - continue - } - if prev.Base()+prev.Size()+1 > file.Base() { - panic(fmt.Sprintf("file %s (%d-%d) overlaps with file %s (%d-%d)", - prev.Name(), prev.Base(), prev.Base()+prev.Size(), - file.Name(), file.Base(), file.Base()+file.Size())) - } - } - out = append(out, file) - } - newFiles = out - - ptr.files = newFiles - - // Advance FileSet.Base(). - if len(newFiles) > 0 { - last := newFiles[len(newFiles)-1] - newBase := last.Base() + last.Size() + 1 - if ptr.base < newBase { - ptr.base = newBase - } - } -} - -// FileSetFor returns a new FileSet containing a sequence of new Files with -// the same base, size, and line as the input files, for use in APIs that -// require a FileSet. -// -// Precondition: the input files must be non-overlapping, and sorted in order -// of their Base. -func FileSetFor(files ...*token.File) *token.FileSet { - fset := token.NewFileSet() - for _, f := range files { - f2 := fset.AddFile(f.Name(), f.Base(), f.Size()) - lines := GetLines(f) - f2.SetLines(lines) - } - return fset -} - -// CloneFileSet creates a new FileSet holding all files in fset. It does not -// create copies of the token.Files in fset: they are added to the resulting -// FileSet unmodified. -func CloneFileSet(fset *token.FileSet) *token.FileSet { - var files []*token.File - fset.Iterate(func(f *token.File) bool { - files = append(files, f) - return true - }) - newFileSet := token.NewFileSet() - AddExistingFiles(newFileSet, files) - return newFileSet -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/typeparams/BUILD.bazel deleted file mode 100644 index 9c2dc20b6c65..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/BUILD.bazel +++ /dev/null @@ -1,17 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "typeparams", - srcs = [ - "common.go", - "coretype.go", - "normalize.go", - "termlist.go", - "typeterm.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/typeparams", - importpath = "golang.org/x/tools/internal/typeparams", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/common.go b/go/extractor/vendor/golang.org/x/tools/internal/typeparams/common.go deleted file mode 100644 index cdab9885314f..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/common.go +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package typeparams contains common utilities for writing tools that interact -// with generic Go code, as introduced with Go 1.18. -// -// Many of the types and functions in this package are proxies for the new APIs -// introduced in the standard library with Go 1.18. For example, the -// typeparams.Union type is an alias for go/types.Union, and the ForTypeSpec -// function returns the value of the go/ast.TypeSpec.TypeParams field. At Go -// versions older than 1.18 these helpers are implemented as stubs, allowing -// users of this package to write code that handles generic constructs inline, -// even if the Go version being used to compile does not support generics. -// -// Additionally, this package contains common utilities for working with the -// new generic constructs, to supplement the standard library APIs. Notably, -// the StructuralTerms API computes a minimal representation of the structural -// restrictions on a type parameter. -// -// An external version of these APIs is available in the -// golang.org/x/exp/typeparams module. -package typeparams - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" -) - -// UnpackIndexExpr extracts data from AST nodes that represent index -// expressions. -// -// For an ast.IndexExpr, the resulting indices slice will contain exactly one -// index expression. For an ast.IndexListExpr (go1.18+), it may have a variable -// number of index expressions. -// -// For nodes that don't represent index expressions, the first return value of -// UnpackIndexExpr will be nil. -func UnpackIndexExpr(n ast.Node) (x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) { - switch e := n.(type) { - case *ast.IndexExpr: - return e.X, e.Lbrack, []ast.Expr{e.Index}, e.Rbrack - case *ast.IndexListExpr: - return e.X, e.Lbrack, e.Indices, e.Rbrack - } - return nil, token.NoPos, nil, token.NoPos -} - -// PackIndexExpr returns an *ast.IndexExpr or *ast.IndexListExpr, depending on -// the cardinality of indices. Calling PackIndexExpr with len(indices) == 0 -// will panic. -func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) ast.Expr { - switch len(indices) { - case 0: - panic("empty indices") - case 1: - return &ast.IndexExpr{ - X: x, - Lbrack: lbrack, - Index: indices[0], - Rbrack: rbrack, - } - default: - return &ast.IndexListExpr{ - X: x, - Lbrack: lbrack, - Indices: indices, - Rbrack: rbrack, - } - } -} - -// IsTypeParam reports whether t is a type parameter. -func IsTypeParam(t types.Type) bool { - _, ok := t.(*types.TypeParam) - return ok -} - -// OriginMethod returns the origin method associated with the method fn. -// For methods on a non-generic receiver base type, this is just -// fn. However, for methods with a generic receiver, OriginMethod returns the -// corresponding method in the method set of the origin type. -// -// As a special case, if fn is not a method (has no receiver), OriginMethod -// returns fn. -func OriginMethod(fn *types.Func) *types.Func { - recv := fn.Type().(*types.Signature).Recv() - if recv == nil { - return fn - } - base := recv.Type() - p, isPtr := base.(*types.Pointer) - if isPtr { - base = p.Elem() - } - named, isNamed := base.(*types.Named) - if !isNamed { - // Receiver is a *types.Interface. - return fn - } - if named.TypeParams().Len() == 0 { - // Receiver base has no type parameters, so we can avoid the lookup below. - return fn - } - orig := named.Origin() - gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name()) - - // This is a fix for a gopls crash (#60628) due to a go/types bug (#60634). In: - // package p - // type T *int - // func (*T) f() {} - // LookupFieldOrMethod(T, true, p, f)=nil, but NewMethodSet(*T)={(*T).f}. - // Here we make them consistent by force. - // (The go/types bug is general, but this workaround is reached only - // for generic T thanks to the early return above.) - if gfn == nil { - mset := types.NewMethodSet(types.NewPointer(orig)) - for i := 0; i < mset.Len(); i++ { - m := mset.At(i) - if m.Obj().Id() == fn.Id() { - gfn = m.Obj() - break - } - } - } - - // In golang/go#61196, we observe another crash, this time inexplicable. - if gfn == nil { - panic(fmt.Sprintf("missing origin method for %s.%s; named == origin: %t, named.NumMethods(): %d, origin.NumMethods(): %d", named, fn, named == orig, named.NumMethods(), orig.NumMethods())) - } - - return gfn.(*types.Func) -} - -// GenericAssignableTo is a generalization of types.AssignableTo that -// implements the following rule for uninstantiated generic types: -// -// If V and T are generic named types, then V is considered assignable to T if, -// for every possible instantation of V[A_1, ..., A_N], the instantiation -// T[A_1, ..., A_N] is valid and V[A_1, ..., A_N] implements T[A_1, ..., A_N]. -// -// If T has structural constraints, they must be satisfied by V. -// -// For example, consider the following type declarations: -// -// type Interface[T any] interface { -// Accept(T) -// } -// -// type Container[T any] struct { -// Element T -// } -// -// func (c Container[T]) Accept(t T) { c.Element = t } -// -// In this case, GenericAssignableTo reports that instantiations of Container -// are assignable to the corresponding instantiation of Interface. -func GenericAssignableTo(ctxt *types.Context, V, T types.Type) bool { - // If V and T are not both named, or do not have matching non-empty type - // parameter lists, fall back on types.AssignableTo. - - VN, Vnamed := V.(*types.Named) - TN, Tnamed := T.(*types.Named) - if !Vnamed || !Tnamed { - return types.AssignableTo(V, T) - } - - vtparams := VN.TypeParams() - ttparams := TN.TypeParams() - if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || VN.TypeArgs().Len() != 0 || TN.TypeArgs().Len() != 0 { - return types.AssignableTo(V, T) - } - - // V and T have the same (non-zero) number of type params. Instantiate both - // with the type parameters of V. This must always succeed for V, and will - // succeed for T if and only if the type set of each type parameter of V is a - // subset of the type set of the corresponding type parameter of T, meaning - // that every instantiation of V corresponds to a valid instantiation of T. - - // Minor optimization: ensure we share a context across the two - // instantiations below. - if ctxt == nil { - ctxt = types.NewContext() - } - - var targs []types.Type - for i := 0; i < vtparams.Len(); i++ { - targs = append(targs, vtparams.At(i)) - } - - vinst, err := types.Instantiate(ctxt, V, targs, true) - if err != nil { - panic("type parameters should satisfy their own constraints") - } - - tinst, err := types.Instantiate(ctxt, T, targs, true) - if err != nil { - return false - } - - return types.AssignableTo(vinst, tinst) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/coretype.go b/go/extractor/vendor/golang.org/x/tools/internal/typeparams/coretype.go deleted file mode 100644 index 7ea8840eab7c..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/coretype.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typeparams - -import ( - "go/types" -) - -// CoreType returns the core type of T or nil if T does not have a core type. -// -// See https://go.dev/ref/spec#Core_types for the definition of a core type. -func CoreType(T types.Type) types.Type { - U := T.Underlying() - if _, ok := U.(*types.Interface); !ok { - return U // for non-interface types, - } - - terms, err := _NormalTerms(U) - if len(terms) == 0 || err != nil { - // len(terms) -> empty type set of interface. - // err != nil => U is invalid, exceeds complexity bounds, or has an empty type set. - return nil // no core type. - } - - U = terms[0].Type().Underlying() - var identical int // i in [0,identical) => Identical(U, terms[i].Type().Underlying()) - for identical = 1; identical < len(terms); identical++ { - if !types.Identical(U, terms[identical].Type().Underlying()) { - break - } - } - - if identical == len(terms) { - // https://go.dev/ref/spec#Core_types - // "There is a single type U which is the underlying type of all types in the type set of T" - return U - } - ch, ok := U.(*types.Chan) - if !ok { - return nil // no core type as identical < len(terms) and U is not a channel. - } - // https://go.dev/ref/spec#Core_types - // "the type chan E if T contains only bidirectional channels, or the type chan<- E or - // <-chan E depending on the direction of the directional channels present." - for chans := identical; chans < len(terms); chans++ { - curr, ok := terms[chans].Type().Underlying().(*types.Chan) - if !ok { - return nil - } - if !types.Identical(ch.Elem(), curr.Elem()) { - return nil // channel elements are not identical. - } - if ch.Dir() == types.SendRecv { - // ch is bidirectional. We can safely always use curr's direction. - ch = curr - } else if curr.Dir() != types.SendRecv && ch.Dir() != curr.Dir() { - // ch and curr are not bidirectional and not the same direction. - return nil - } - } - return ch -} - -// _NormalTerms returns a slice of terms representing the normalized structural -// type restrictions of a type, if any. -// -// For all types other than *types.TypeParam, *types.Interface, and -// *types.Union, this is just a single term with Tilde() == false and -// Type() == typ. For *types.TypeParam, *types.Interface, and *types.Union, see -// below. -// -// Structural type restrictions of a type parameter are created via -// non-interface types embedded in its constraint interface (directly, or via a -// chain of interface embeddings). For example, in the declaration type -// T[P interface{~int; m()}] int the structural restriction of the type -// parameter P is ~int. -// -// With interface embedding and unions, the specification of structural type -// restrictions may be arbitrarily complex. For example, consider the -// following: -// -// type A interface{ ~string|~[]byte } -// -// type B interface{ int|string } -// -// type C interface { ~string|~int } -// -// type T[P interface{ A|B; C }] int -// -// In this example, the structural type restriction of P is ~string|int: A|B -// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int, -// which when intersected with C (~string|~int) yields ~string|int. -// -// _NormalTerms computes these expansions and reductions, producing a -// "normalized" form of the embeddings. A structural restriction is normalized -// if it is a single union containing no interface terms, and is minimal in the -// sense that removing any term changes the set of types satisfying the -// constraint. It is left as a proof for the reader that, modulo sorting, there -// is exactly one such normalized form. -// -// Because the minimal representation always takes this form, _NormalTerms -// returns a slice of tilde terms corresponding to the terms of the union in -// the normalized structural restriction. An error is returned if the type is -// invalid, exceeds complexity bounds, or has an empty type set. In the latter -// case, _NormalTerms returns ErrEmptyTypeSet. -// -// _NormalTerms makes no guarantees about the order of terms, except that it -// is deterministic. -func _NormalTerms(typ types.Type) ([]*types.Term, error) { - switch typ := typ.(type) { - case *types.TypeParam: - return StructuralTerms(typ) - case *types.Union: - return UnionTermSet(typ) - case *types.Interface: - return InterfaceTermSet(typ) - default: - return []*types.Term{types.NewTerm(false, typ)}, nil - } -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/normalize.go b/go/extractor/vendor/golang.org/x/tools/internal/typeparams/normalize.go deleted file mode 100644 index 93c80fdc96ce..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/normalize.go +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typeparams - -import ( - "errors" - "fmt" - "go/types" - "os" - "strings" -) - -//go:generate go run copytermlist.go - -const debug = false - -var ErrEmptyTypeSet = errors.New("empty type set") - -// StructuralTerms returns a slice of terms representing the normalized -// structural type restrictions of a type parameter, if any. -// -// Structural type restrictions of a type parameter are created via -// non-interface types embedded in its constraint interface (directly, or via a -// chain of interface embeddings). For example, in the declaration -// -// type T[P interface{~int; m()}] int -// -// the structural restriction of the type parameter P is ~int. -// -// With interface embedding and unions, the specification of structural type -// restrictions may be arbitrarily complex. For example, consider the -// following: -// -// type A interface{ ~string|~[]byte } -// -// type B interface{ int|string } -// -// type C interface { ~string|~int } -// -// type T[P interface{ A|B; C }] int -// -// In this example, the structural type restriction of P is ~string|int: A|B -// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int, -// which when intersected with C (~string|~int) yields ~string|int. -// -// StructuralTerms computes these expansions and reductions, producing a -// "normalized" form of the embeddings. A structural restriction is normalized -// if it is a single union containing no interface terms, and is minimal in the -// sense that removing any term changes the set of types satisfying the -// constraint. It is left as a proof for the reader that, modulo sorting, there -// is exactly one such normalized form. -// -// Because the minimal representation always takes this form, StructuralTerms -// returns a slice of tilde terms corresponding to the terms of the union in -// the normalized structural restriction. An error is returned if the -// constraint interface is invalid, exceeds complexity bounds, or has an empty -// type set. In the latter case, StructuralTerms returns ErrEmptyTypeSet. -// -// StructuralTerms makes no guarantees about the order of terms, except that it -// is deterministic. -func StructuralTerms(tparam *types.TypeParam) ([]*types.Term, error) { - constraint := tparam.Constraint() - if constraint == nil { - return nil, fmt.Errorf("%s has nil constraint", tparam) - } - iface, _ := constraint.Underlying().(*types.Interface) - if iface == nil { - return nil, fmt.Errorf("constraint is %T, not *types.Interface", constraint.Underlying()) - } - return InterfaceTermSet(iface) -} - -// InterfaceTermSet computes the normalized terms for a constraint interface, -// returning an error if the term set cannot be computed or is empty. In the -// latter case, the error will be ErrEmptyTypeSet. -// -// See the documentation of StructuralTerms for more information on -// normalization. -func InterfaceTermSet(iface *types.Interface) ([]*types.Term, error) { - return computeTermSet(iface) -} - -// UnionTermSet computes the normalized terms for a union, returning an error -// if the term set cannot be computed or is empty. In the latter case, the -// error will be ErrEmptyTypeSet. -// -// See the documentation of StructuralTerms for more information on -// normalization. -func UnionTermSet(union *types.Union) ([]*types.Term, error) { - return computeTermSet(union) -} - -func computeTermSet(typ types.Type) ([]*types.Term, error) { - tset, err := computeTermSetInternal(typ, make(map[types.Type]*termSet), 0) - if err != nil { - return nil, err - } - if tset.terms.isEmpty() { - return nil, ErrEmptyTypeSet - } - if tset.terms.isAll() { - return nil, nil - } - var terms []*types.Term - for _, term := range tset.terms { - terms = append(terms, types.NewTerm(term.tilde, term.typ)) - } - return terms, nil -} - -// A termSet holds the normalized set of terms for a given type. -// -// The name termSet is intentionally distinct from 'type set': a type set is -// all types that implement a type (and includes method restrictions), whereas -// a term set just represents the structural restrictions on a type. -type termSet struct { - complete bool - terms termlist -} - -func indentf(depth int, format string, args ...interface{}) { - fmt.Fprintf(os.Stderr, strings.Repeat(".", depth)+format+"\n", args...) -} - -func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth int) (res *termSet, err error) { - if t == nil { - panic("nil type") - } - - if debug { - indentf(depth, "%s", t.String()) - defer func() { - if err != nil { - indentf(depth, "=> %s", err) - } else { - indentf(depth, "=> %s", res.terms.String()) - } - }() - } - - const maxTermCount = 100 - if tset, ok := seen[t]; ok { - if !tset.complete { - return nil, fmt.Errorf("cycle detected in the declaration of %s", t) - } - return tset, nil - } - - // Mark the current type as seen to avoid infinite recursion. - tset := new(termSet) - defer func() { - tset.complete = true - }() - seen[t] = tset - - switch u := t.Underlying().(type) { - case *types.Interface: - // The term set of an interface is the intersection of the term sets of its - // embedded types. - tset.terms = allTermlist - for i := 0; i < u.NumEmbeddeds(); i++ { - embedded := u.EmbeddedType(i) - if _, ok := embedded.Underlying().(*types.TypeParam); ok { - return nil, fmt.Errorf("invalid embedded type %T", embedded) - } - tset2, err := computeTermSetInternal(embedded, seen, depth+1) - if err != nil { - return nil, err - } - tset.terms = tset.terms.intersect(tset2.terms) - } - case *types.Union: - // The term set of a union is the union of term sets of its terms. - tset.terms = nil - for i := 0; i < u.Len(); i++ { - t := u.Term(i) - var terms termlist - switch t.Type().Underlying().(type) { - case *types.Interface: - tset2, err := computeTermSetInternal(t.Type(), seen, depth+1) - if err != nil { - return nil, err - } - terms = tset2.terms - case *types.TypeParam, *types.Union: - // A stand-alone type parameter or union is not permitted as union - // term. - return nil, fmt.Errorf("invalid union term %T", t) - default: - if t.Type() == types.Typ[types.Invalid] { - continue - } - terms = termlist{{t.Tilde(), t.Type()}} - } - tset.terms = tset.terms.union(terms) - if len(tset.terms) > maxTermCount { - return nil, fmt.Errorf("exceeded max term count %d", maxTermCount) - } - } - case *types.TypeParam: - panic("unreachable") - default: - // For all other types, the term set is just a single non-tilde term - // holding the type itself. - if u != types.Typ[types.Invalid] { - tset.terms = termlist{{false, t}} - } - } - return tset, nil -} - -// under is a facade for the go/types internal function of the same name. It is -// used by typeterm.go. -func under(t types.Type) types.Type { - return t.Underlying() -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/termlist.go b/go/extractor/vendor/golang.org/x/tools/internal/typeparams/termlist.go deleted file mode 100644 index cbd12f801314..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/termlist.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Code generated by copytermlist.go DO NOT EDIT. - -package typeparams - -import ( - "bytes" - "go/types" -) - -// A termlist represents the type set represented by the union -// t1 ∪ y2 ∪ ... tn of the type sets of the terms t1 to tn. -// A termlist is in normal form if all terms are disjoint. -// termlist operations don't require the operands to be in -// normal form. -type termlist []*term - -// allTermlist represents the set of all types. -// It is in normal form. -var allTermlist = termlist{new(term)} - -// String prints the termlist exactly (without normalization). -func (xl termlist) String() string { - if len(xl) == 0 { - return "∅" - } - var buf bytes.Buffer - for i, x := range xl { - if i > 0 { - buf.WriteString(" | ") - } - buf.WriteString(x.String()) - } - return buf.String() -} - -// isEmpty reports whether the termlist xl represents the empty set of types. -func (xl termlist) isEmpty() bool { - // If there's a non-nil term, the entire list is not empty. - // If the termlist is in normal form, this requires at most - // one iteration. - for _, x := range xl { - if x != nil { - return false - } - } - return true -} - -// isAll reports whether the termlist xl represents the set of all types. -func (xl termlist) isAll() bool { - // If there's a 𝓤 term, the entire list is 𝓤. - // If the termlist is in normal form, this requires at most - // one iteration. - for _, x := range xl { - if x != nil && x.typ == nil { - return true - } - } - return false -} - -// norm returns the normal form of xl. -func (xl termlist) norm() termlist { - // Quadratic algorithm, but good enough for now. - // TODO(gri) fix asymptotic performance - used := make([]bool, len(xl)) - var rl termlist - for i, xi := range xl { - if xi == nil || used[i] { - continue - } - for j := i + 1; j < len(xl); j++ { - xj := xl[j] - if xj == nil || used[j] { - continue - } - if u1, u2 := xi.union(xj); u2 == nil { - // If we encounter a 𝓤 term, the entire list is 𝓤. - // Exit early. - // (Note that this is not just an optimization; - // if we continue, we may end up with a 𝓤 term - // and other terms and the result would not be - // in normal form.) - if u1.typ == nil { - return allTermlist - } - xi = u1 - used[j] = true // xj is now unioned into xi - ignore it in future iterations - } - } - rl = append(rl, xi) - } - return rl -} - -// union returns the union xl ∪ yl. -func (xl termlist) union(yl termlist) termlist { - return append(xl, yl...).norm() -} - -// intersect returns the intersection xl ∩ yl. -func (xl termlist) intersect(yl termlist) termlist { - if xl.isEmpty() || yl.isEmpty() { - return nil - } - - // Quadratic algorithm, but good enough for now. - // TODO(gri) fix asymptotic performance - var rl termlist - for _, x := range xl { - for _, y := range yl { - if r := x.intersect(y); r != nil { - rl = append(rl, r) - } - } - } - return rl.norm() -} - -// equal reports whether xl and yl represent the same type set. -func (xl termlist) equal(yl termlist) bool { - // TODO(gri) this should be more efficient - return xl.subsetOf(yl) && yl.subsetOf(xl) -} - -// includes reports whether t ∈ xl. -func (xl termlist) includes(t types.Type) bool { - for _, x := range xl { - if x.includes(t) { - return true - } - } - return false -} - -// supersetOf reports whether y ⊆ xl. -func (xl termlist) supersetOf(y *term) bool { - for _, x := range xl { - if y.subsetOf(x) { - return true - } - } - return false -} - -// subsetOf reports whether xl ⊆ yl. -func (xl termlist) subsetOf(yl termlist) bool { - if yl.isEmpty() { - return xl.isEmpty() - } - - // each term x of xl must be a subset of yl - for _, x := range xl { - if !yl.supersetOf(x) { - return false // x is not a subset yl - } - } - return true -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/typeterm.go b/go/extractor/vendor/golang.org/x/tools/internal/typeparams/typeterm.go deleted file mode 100644 index 7350bb702a17..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typeparams/typeterm.go +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Code generated by copytermlist.go DO NOT EDIT. - -package typeparams - -import "go/types" - -// A term describes elementary type sets: -// -// ∅: (*term)(nil) == ∅ // set of no types (empty set) -// 𝓤: &term{} == 𝓤 // set of all types (𝓤niverse) -// T: &term{false, T} == {T} // set of type T -// ~t: &term{true, t} == {t' | under(t') == t} // set of types with underlying type t -type term struct { - tilde bool // valid if typ != nil - typ types.Type -} - -func (x *term) String() string { - switch { - case x == nil: - return "∅" - case x.typ == nil: - return "𝓤" - case x.tilde: - return "~" + x.typ.String() - default: - return x.typ.String() - } -} - -// equal reports whether x and y represent the same type set. -func (x *term) equal(y *term) bool { - // easy cases - switch { - case x == nil || y == nil: - return x == y - case x.typ == nil || y.typ == nil: - return x.typ == y.typ - } - // ∅ ⊂ x, y ⊂ 𝓤 - - return x.tilde == y.tilde && types.Identical(x.typ, y.typ) -} - -// union returns the union x ∪ y: zero, one, or two non-nil terms. -func (x *term) union(y *term) (_, _ *term) { - // easy cases - switch { - case x == nil && y == nil: - return nil, nil // ∅ ∪ ∅ == ∅ - case x == nil: - return y, nil // ∅ ∪ y == y - case y == nil: - return x, nil // x ∪ ∅ == x - case x.typ == nil: - return x, nil // 𝓤 ∪ y == 𝓤 - case y.typ == nil: - return y, nil // x ∪ 𝓤 == 𝓤 - } - // ∅ ⊂ x, y ⊂ 𝓤 - - if x.disjoint(y) { - return x, y // x ∪ y == (x, y) if x ∩ y == ∅ - } - // x.typ == y.typ - - // ~t ∪ ~t == ~t - // ~t ∪ T == ~t - // T ∪ ~t == ~t - // T ∪ T == T - if x.tilde || !y.tilde { - return x, nil - } - return y, nil -} - -// intersect returns the intersection x ∩ y. -func (x *term) intersect(y *term) *term { - // easy cases - switch { - case x == nil || y == nil: - return nil // ∅ ∩ y == ∅ and ∩ ∅ == ∅ - case x.typ == nil: - return y // 𝓤 ∩ y == y - case y.typ == nil: - return x // x ∩ 𝓤 == x - } - // ∅ ⊂ x, y ⊂ 𝓤 - - if x.disjoint(y) { - return nil // x ∩ y == ∅ if x ∩ y == ∅ - } - // x.typ == y.typ - - // ~t ∩ ~t == ~t - // ~t ∩ T == T - // T ∩ ~t == T - // T ∩ T == T - if !x.tilde || y.tilde { - return x - } - return y -} - -// includes reports whether t ∈ x. -func (x *term) includes(t types.Type) bool { - // easy cases - switch { - case x == nil: - return false // t ∈ ∅ == false - case x.typ == nil: - return true // t ∈ 𝓤 == true - } - // ∅ ⊂ x ⊂ 𝓤 - - u := t - if x.tilde { - u = under(u) - } - return types.Identical(x.typ, u) -} - -// subsetOf reports whether x ⊆ y. -func (x *term) subsetOf(y *term) bool { - // easy cases - switch { - case x == nil: - return true // ∅ ⊆ y == true - case y == nil: - return false // x ⊆ ∅ == false since x != ∅ - case y.typ == nil: - return true // x ⊆ 𝓤 == true - case x.typ == nil: - return false // 𝓤 ⊆ y == false since y != 𝓤 - } - // ∅ ⊂ x, y ⊂ 𝓤 - - if x.disjoint(y) { - return false // x ⊆ y == false if x ∩ y == ∅ - } - // x.typ == y.typ - - // ~t ⊆ ~t == true - // ~t ⊆ T == false - // T ⊆ ~t == true - // T ⊆ T == true - return !x.tilde || y.tilde -} - -// disjoint reports whether x ∩ y == ∅. -// x.typ and y.typ must not be nil. -func (x *term) disjoint(y *term) bool { - if debug && (x.typ == nil || y.typ == nil) { - panic("invalid argument(s)") - } - ux := x.typ - if y.tilde { - ux = under(ux) - } - uy := y.typ - if x.tilde { - uy = under(uy) - } - return !types.Identical(ux, uy) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/BUILD.bazel deleted file mode 100644 index 653752ab7152..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "typesinternal", - srcs = [ - "errorcode.go", - "errorcode_string.go", - "types.go", - "types_118.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/typesinternal", - importpath = "golang.org/x/tools/internal/typesinternal", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go b/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go deleted file mode 100644 index 07484073a57d..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go +++ /dev/null @@ -1,1560 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package typesinternal - -//go:generate stringer -type=ErrorCode - -type ErrorCode int - -// This file defines the error codes that can be produced during type-checking. -// Collectively, these codes provide an identifier that may be used to -// implement special handling for certain types of errors. -// -// Error codes should be fine-grained enough that the exact nature of the error -// can be easily determined, but coarse enough that they are not an -// implementation detail of the type checking algorithm. As a rule-of-thumb, -// errors should be considered equivalent if there is a theoretical refactoring -// of the type checker in which they are emitted in exactly one place. For -// example, the type checker emits different error messages for "too many -// arguments" and "too few arguments", but one can imagine an alternative type -// checker where this check instead just emits a single "wrong number of -// arguments", so these errors should have the same code. -// -// Error code names should be as brief as possible while retaining accuracy and -// distinctiveness. In most cases names should start with an adjective -// describing the nature of the error (e.g. "invalid", "unused", "misplaced"), -// and end with a noun identifying the relevant language object. For example, -// "DuplicateDecl" or "InvalidSliceExpr". For brevity, naming follows the -// convention that "bad" implies a problem with syntax, and "invalid" implies a -// problem with types. - -const ( - // InvalidSyntaxTree occurs if an invalid syntax tree is provided - // to the type checker. It should never happen. - InvalidSyntaxTree ErrorCode = -1 -) - -const ( - _ ErrorCode = iota - - // Test is reserved for errors that only apply while in self-test mode. - Test - - /* package names */ - - // BlankPkgName occurs when a package name is the blank identifier "_". - // - // Per the spec: - // "The PackageName must not be the blank identifier." - BlankPkgName - - // MismatchedPkgName occurs when a file's package name doesn't match the - // package name already established by other files. - MismatchedPkgName - - // InvalidPkgUse occurs when a package identifier is used outside of a - // selector expression. - // - // Example: - // import "fmt" - // - // var _ = fmt - InvalidPkgUse - - /* imports */ - - // BadImportPath occurs when an import path is not valid. - BadImportPath - - // BrokenImport occurs when importing a package fails. - // - // Example: - // import "amissingpackage" - BrokenImport - - // ImportCRenamed occurs when the special import "C" is renamed. "C" is a - // pseudo-package, and must not be renamed. - // - // Example: - // import _ "C" - ImportCRenamed - - // UnusedImport occurs when an import is unused. - // - // Example: - // import "fmt" - // - // func main() {} - UnusedImport - - /* initialization */ - - // InvalidInitCycle occurs when an invalid cycle is detected within the - // initialization graph. - // - // Example: - // var x int = f() - // - // func f() int { return x } - InvalidInitCycle - - /* decls */ - - // DuplicateDecl occurs when an identifier is declared multiple times. - // - // Example: - // var x = 1 - // var x = 2 - DuplicateDecl - - // InvalidDeclCycle occurs when a declaration cycle is not valid. - // - // Example: - // import "unsafe" - // - // type T struct { - // a [n]int - // } - // - // var n = unsafe.Sizeof(T{}) - InvalidDeclCycle - - // InvalidTypeCycle occurs when a cycle in type definitions results in a - // type that is not well-defined. - // - // Example: - // import "unsafe" - // - // type T [unsafe.Sizeof(T{})]int - InvalidTypeCycle - - /* decls > const */ - - // InvalidConstInit occurs when a const declaration has a non-constant - // initializer. - // - // Example: - // var x int - // const _ = x - InvalidConstInit - - // InvalidConstVal occurs when a const value cannot be converted to its - // target type. - // - // TODO(findleyr): this error code and example are not very clear. Consider - // removing it. - // - // Example: - // const _ = 1 << "hello" - InvalidConstVal - - // InvalidConstType occurs when the underlying type in a const declaration - // is not a valid constant type. - // - // Example: - // const c *int = 4 - InvalidConstType - - /* decls > var (+ other variable assignment codes) */ - - // UntypedNilUse occurs when the predeclared (untyped) value nil is used to - // initialize a variable declared without an explicit type. - // - // Example: - // var x = nil - UntypedNilUse - - // WrongAssignCount occurs when the number of values on the right-hand side - // of an assignment or or initialization expression does not match the number - // of variables on the left-hand side. - // - // Example: - // var x = 1, 2 - WrongAssignCount - - // UnassignableOperand occurs when the left-hand side of an assignment is - // not assignable. - // - // Example: - // func f() { - // const c = 1 - // c = 2 - // } - UnassignableOperand - - // NoNewVar occurs when a short variable declaration (':=') does not declare - // new variables. - // - // Example: - // func f() { - // x := 1 - // x := 2 - // } - NoNewVar - - // MultiValAssignOp occurs when an assignment operation (+=, *=, etc) does - // not have single-valued left-hand or right-hand side. - // - // Per the spec: - // "In assignment operations, both the left- and right-hand expression lists - // must contain exactly one single-valued expression" - // - // Example: - // func f() int { - // x, y := 1, 2 - // x, y += 1 - // return x + y - // } - MultiValAssignOp - - // InvalidIfaceAssign occurs when a value of type T is used as an - // interface, but T does not implement a method of the expected interface. - // - // Example: - // type I interface { - // f() - // } - // - // type T int - // - // var x I = T(1) - InvalidIfaceAssign - - // InvalidChanAssign occurs when a chan assignment is invalid. - // - // Per the spec, a value x is assignable to a channel type T if: - // "x is a bidirectional channel value, T is a channel type, x's type V and - // T have identical element types, and at least one of V or T is not a - // defined type." - // - // Example: - // type T1 chan int - // type T2 chan int - // - // var x T1 - // // Invalid assignment because both types are named - // var _ T2 = x - InvalidChanAssign - - // IncompatibleAssign occurs when the type of the right-hand side expression - // in an assignment cannot be assigned to the type of the variable being - // assigned. - // - // Example: - // var x []int - // var _ int = x - IncompatibleAssign - - // UnaddressableFieldAssign occurs when trying to assign to a struct field - // in a map value. - // - // Example: - // func f() { - // m := make(map[string]struct{i int}) - // m["foo"].i = 42 - // } - UnaddressableFieldAssign - - /* decls > type (+ other type expression codes) */ - - // NotAType occurs when the identifier used as the underlying type in a type - // declaration or the right-hand side of a type alias does not denote a type. - // - // Example: - // var S = 2 - // - // type T S - NotAType - - // InvalidArrayLen occurs when an array length is not a constant value. - // - // Example: - // var n = 3 - // var _ = [n]int{} - InvalidArrayLen - - // BlankIfaceMethod occurs when a method name is '_'. - // - // Per the spec: - // "The name of each explicitly specified method must be unique and not - // blank." - // - // Example: - // type T interface { - // _(int) - // } - BlankIfaceMethod - - // IncomparableMapKey occurs when a map key type does not support the == and - // != operators. - // - // Per the spec: - // "The comparison operators == and != must be fully defined for operands of - // the key type; thus the key type must not be a function, map, or slice." - // - // Example: - // var x map[T]int - // - // type T []int - IncomparableMapKey - - // InvalidIfaceEmbed occurs when a non-interface type is embedded in an - // interface. - // - // Example: - // type T struct {} - // - // func (T) m() - // - // type I interface { - // T - // } - InvalidIfaceEmbed - - // InvalidPtrEmbed occurs when an embedded field is of the pointer form *T, - // and T itself is itself a pointer, an unsafe.Pointer, or an interface. - // - // Per the spec: - // "An embedded field must be specified as a type name T or as a pointer to - // a non-interface type name *T, and T itself may not be a pointer type." - // - // Example: - // type T *int - // - // type S struct { - // *T - // } - InvalidPtrEmbed - - /* decls > func and method */ - - // BadRecv occurs when a method declaration does not have exactly one - // receiver parameter. - // - // Example: - // func () _() {} - BadRecv - - // InvalidRecv occurs when a receiver type expression is not of the form T - // or *T, or T is a pointer type. - // - // Example: - // type T struct {} - // - // func (**T) m() {} - InvalidRecv - - // DuplicateFieldAndMethod occurs when an identifier appears as both a field - // and method name. - // - // Example: - // type T struct { - // m int - // } - // - // func (T) m() {} - DuplicateFieldAndMethod - - // DuplicateMethod occurs when two methods on the same receiver type have - // the same name. - // - // Example: - // type T struct {} - // func (T) m() {} - // func (T) m(i int) int { return i } - DuplicateMethod - - /* decls > special */ - - // InvalidBlank occurs when a blank identifier is used as a value or type. - // - // Per the spec: - // "The blank identifier may appear as an operand only on the left-hand side - // of an assignment." - // - // Example: - // var x = _ - InvalidBlank - - // InvalidIota occurs when the predeclared identifier iota is used outside - // of a constant declaration. - // - // Example: - // var x = iota - InvalidIota - - // MissingInitBody occurs when an init function is missing its body. - // - // Example: - // func init() - MissingInitBody - - // InvalidInitSig occurs when an init function declares parameters or - // results. - // - // Example: - // func init() int { return 1 } - InvalidInitSig - - // InvalidInitDecl occurs when init is declared as anything other than a - // function. - // - // Example: - // var init = 1 - InvalidInitDecl - - // InvalidMainDecl occurs when main is declared as anything other than a - // function, in a main package. - InvalidMainDecl - - /* exprs */ - - // TooManyValues occurs when a function returns too many values for the - // expression context in which it is used. - // - // Example: - // func ReturnTwo() (int, int) { - // return 1, 2 - // } - // - // var x = ReturnTwo() - TooManyValues - - // NotAnExpr occurs when a type expression is used where a value expression - // is expected. - // - // Example: - // type T struct {} - // - // func f() { - // T - // } - NotAnExpr - - /* exprs > const */ - - // TruncatedFloat occurs when a float constant is truncated to an integer - // value. - // - // Example: - // var _ int = 98.6 - TruncatedFloat - - // NumericOverflow occurs when a numeric constant overflows its target type. - // - // Example: - // var x int8 = 1000 - NumericOverflow - - /* exprs > operation */ - - // UndefinedOp occurs when an operator is not defined for the type(s) used - // in an operation. - // - // Example: - // var c = "a" - "b" - UndefinedOp - - // MismatchedTypes occurs when operand types are incompatible in a binary - // operation. - // - // Example: - // var a = "hello" - // var b = 1 - // var c = a - b - MismatchedTypes - - // DivByZero occurs when a division operation is provable at compile - // time to be a division by zero. - // - // Example: - // const divisor = 0 - // var x int = 1/divisor - DivByZero - - // NonNumericIncDec occurs when an increment or decrement operator is - // applied to a non-numeric value. - // - // Example: - // func f() { - // var c = "c" - // c++ - // } - NonNumericIncDec - - /* exprs > ptr */ - - // UnaddressableOperand occurs when the & operator is applied to an - // unaddressable expression. - // - // Example: - // var x = &1 - UnaddressableOperand - - // InvalidIndirection occurs when a non-pointer value is indirected via the - // '*' operator. - // - // Example: - // var x int - // var y = *x - InvalidIndirection - - /* exprs > [] */ - - // NonIndexableOperand occurs when an index operation is applied to a value - // that cannot be indexed. - // - // Example: - // var x = 1 - // var y = x[1] - NonIndexableOperand - - // InvalidIndex occurs when an index argument is not of integer type, - // negative, or out-of-bounds. - // - // Example: - // var s = [...]int{1,2,3} - // var x = s[5] - // - // Example: - // var s = []int{1,2,3} - // var _ = s[-1] - // - // Example: - // var s = []int{1,2,3} - // var i string - // var _ = s[i] - InvalidIndex - - // SwappedSliceIndices occurs when constant indices in a slice expression - // are decreasing in value. - // - // Example: - // var _ = []int{1,2,3}[2:1] - SwappedSliceIndices - - /* operators > slice */ - - // NonSliceableOperand occurs when a slice operation is applied to a value - // whose type is not sliceable, or is unaddressable. - // - // Example: - // var x = [...]int{1, 2, 3}[:1] - // - // Example: - // var x = 1 - // var y = 1[:1] - NonSliceableOperand - - // InvalidSliceExpr occurs when a three-index slice expression (a[x:y:z]) is - // applied to a string. - // - // Example: - // var s = "hello" - // var x = s[1:2:3] - InvalidSliceExpr - - /* exprs > shift */ - - // InvalidShiftCount occurs when the right-hand side of a shift operation is - // either non-integer, negative, or too large. - // - // Example: - // var ( - // x string - // y int = 1 << x - // ) - InvalidShiftCount - - // InvalidShiftOperand occurs when the shifted operand is not an integer. - // - // Example: - // var s = "hello" - // var x = s << 2 - InvalidShiftOperand - - /* exprs > chan */ - - // InvalidReceive occurs when there is a channel receive from a value that - // is either not a channel, or is a send-only channel. - // - // Example: - // func f() { - // var x = 1 - // <-x - // } - InvalidReceive - - // InvalidSend occurs when there is a channel send to a value that is not a - // channel, or is a receive-only channel. - // - // Example: - // func f() { - // var x = 1 - // x <- "hello!" - // } - InvalidSend - - /* exprs > literal */ - - // DuplicateLitKey occurs when an index is duplicated in a slice, array, or - // map literal. - // - // Example: - // var _ = []int{0:1, 0:2} - // - // Example: - // var _ = map[string]int{"a": 1, "a": 2} - DuplicateLitKey - - // MissingLitKey occurs when a map literal is missing a key expression. - // - // Example: - // var _ = map[string]int{1} - MissingLitKey - - // InvalidLitIndex occurs when the key in a key-value element of a slice or - // array literal is not an integer constant. - // - // Example: - // var i = 0 - // var x = []string{i: "world"} - InvalidLitIndex - - // OversizeArrayLit occurs when an array literal exceeds its length. - // - // Example: - // var _ = [2]int{1,2,3} - OversizeArrayLit - - // MixedStructLit occurs when a struct literal contains a mix of positional - // and named elements. - // - // Example: - // var _ = struct{i, j int}{i: 1, 2} - MixedStructLit - - // InvalidStructLit occurs when a positional struct literal has an incorrect - // number of values. - // - // Example: - // var _ = struct{i, j int}{1,2,3} - InvalidStructLit - - // MissingLitField occurs when a struct literal refers to a field that does - // not exist on the struct type. - // - // Example: - // var _ = struct{i int}{j: 2} - MissingLitField - - // DuplicateLitField occurs when a struct literal contains duplicated - // fields. - // - // Example: - // var _ = struct{i int}{i: 1, i: 2} - DuplicateLitField - - // UnexportedLitField occurs when a positional struct literal implicitly - // assigns an unexported field of an imported type. - UnexportedLitField - - // InvalidLitField occurs when a field name is not a valid identifier. - // - // Example: - // var _ = struct{i int}{1: 1} - InvalidLitField - - // UntypedLit occurs when a composite literal omits a required type - // identifier. - // - // Example: - // type outer struct{ - // inner struct { i int } - // } - // - // var _ = outer{inner: {1}} - UntypedLit - - // InvalidLit occurs when a composite literal expression does not match its - // type. - // - // Example: - // type P *struct{ - // x int - // } - // var _ = P {} - InvalidLit - - /* exprs > selector */ - - // AmbiguousSelector occurs when a selector is ambiguous. - // - // Example: - // type E1 struct { i int } - // type E2 struct { i int } - // type T struct { E1; E2 } - // - // var x T - // var _ = x.i - AmbiguousSelector - - // UndeclaredImportedName occurs when a package-qualified identifier is - // undeclared by the imported package. - // - // Example: - // import "go/types" - // - // var _ = types.NotAnActualIdentifier - UndeclaredImportedName - - // UnexportedName occurs when a selector refers to an unexported identifier - // of an imported package. - // - // Example: - // import "reflect" - // - // type _ reflect.flag - UnexportedName - - // UndeclaredName occurs when an identifier is not declared in the current - // scope. - // - // Example: - // var x T - UndeclaredName - - // MissingFieldOrMethod occurs when a selector references a field or method - // that does not exist. - // - // Example: - // type T struct {} - // - // var x = T{}.f - MissingFieldOrMethod - - /* exprs > ... */ - - // BadDotDotDotSyntax occurs when a "..." occurs in a context where it is - // not valid. - // - // Example: - // var _ = map[int][...]int{0: {}} - BadDotDotDotSyntax - - // NonVariadicDotDotDot occurs when a "..." is used on the final argument to - // a non-variadic function. - // - // Example: - // func printArgs(s []string) { - // for _, a := range s { - // println(a) - // } - // } - // - // func f() { - // s := []string{"a", "b", "c"} - // printArgs(s...) - // } - NonVariadicDotDotDot - - // MisplacedDotDotDot occurs when a "..." is used somewhere other than the - // final argument to a function call. - // - // Example: - // func printArgs(args ...int) { - // for _, a := range args { - // println(a) - // } - // } - // - // func f() { - // a := []int{1,2,3} - // printArgs(0, a...) - // } - MisplacedDotDotDot - - // InvalidDotDotDotOperand occurs when a "..." operator is applied to a - // single-valued operand. - // - // Example: - // func printArgs(args ...int) { - // for _, a := range args { - // println(a) - // } - // } - // - // func f() { - // a := 1 - // printArgs(a...) - // } - // - // Example: - // func args() (int, int) { - // return 1, 2 - // } - // - // func printArgs(args ...int) { - // for _, a := range args { - // println(a) - // } - // } - // - // func g() { - // printArgs(args()...) - // } - InvalidDotDotDotOperand - - // InvalidDotDotDot occurs when a "..." is used in a non-variadic built-in - // function. - // - // Example: - // var s = []int{1, 2, 3} - // var l = len(s...) - InvalidDotDotDot - - /* exprs > built-in */ - - // UncalledBuiltin occurs when a built-in function is used as a - // function-valued expression, instead of being called. - // - // Per the spec: - // "The built-in functions do not have standard Go types, so they can only - // appear in call expressions; they cannot be used as function values." - // - // Example: - // var _ = copy - UncalledBuiltin - - // InvalidAppend occurs when append is called with a first argument that is - // not a slice. - // - // Example: - // var _ = append(1, 2) - InvalidAppend - - // InvalidCap occurs when an argument to the cap built-in function is not of - // supported type. - // - // See https://golang.org/ref/spec#Lengthand_capacity for information on - // which underlying types are supported as arguments to cap and len. - // - // Example: - // var s = 2 - // var x = cap(s) - InvalidCap - - // InvalidClose occurs when close(...) is called with an argument that is - // not of channel type, or that is a receive-only channel. - // - // Example: - // func f() { - // var x int - // close(x) - // } - InvalidClose - - // InvalidCopy occurs when the arguments are not of slice type or do not - // have compatible type. - // - // See https://golang.org/ref/spec#Appendingand_copying_slices for more - // information on the type requirements for the copy built-in. - // - // Example: - // func f() { - // var x []int - // y := []int64{1,2,3} - // copy(x, y) - // } - InvalidCopy - - // InvalidComplex occurs when the complex built-in function is called with - // arguments with incompatible types. - // - // Example: - // var _ = complex(float32(1), float64(2)) - InvalidComplex - - // InvalidDelete occurs when the delete built-in function is called with a - // first argument that is not a map. - // - // Example: - // func f() { - // m := "hello" - // delete(m, "e") - // } - InvalidDelete - - // InvalidImag occurs when the imag built-in function is called with an - // argument that does not have complex type. - // - // Example: - // var _ = imag(int(1)) - InvalidImag - - // InvalidLen occurs when an argument to the len built-in function is not of - // supported type. - // - // See https://golang.org/ref/spec#Lengthand_capacity for information on - // which underlying types are supported as arguments to cap and len. - // - // Example: - // var s = 2 - // var x = len(s) - InvalidLen - - // SwappedMakeArgs occurs when make is called with three arguments, and its - // length argument is larger than its capacity argument. - // - // Example: - // var x = make([]int, 3, 2) - SwappedMakeArgs - - // InvalidMake occurs when make is called with an unsupported type argument. - // - // See https://golang.org/ref/spec#Makingslices_maps_and_channels for - // information on the types that may be created using make. - // - // Example: - // var x = make(int) - InvalidMake - - // InvalidReal occurs when the real built-in function is called with an - // argument that does not have complex type. - // - // Example: - // var _ = real(int(1)) - InvalidReal - - /* exprs > assertion */ - - // InvalidAssert occurs when a type assertion is applied to a - // value that is not of interface type. - // - // Example: - // var x = 1 - // var _ = x.(float64) - InvalidAssert - - // ImpossibleAssert occurs for a type assertion x.(T) when the value x of - // interface cannot have dynamic type T, due to a missing or mismatching - // method on T. - // - // Example: - // type T int - // - // func (t *T) m() int { return int(*t) } - // - // type I interface { m() int } - // - // var x I - // var _ = x.(T) - ImpossibleAssert - - /* exprs > conversion */ - - // InvalidConversion occurs when the argument type cannot be converted to the - // target. - // - // See https://golang.org/ref/spec#Conversions for the rules of - // convertibility. - // - // Example: - // var x float64 - // var _ = string(x) - InvalidConversion - - // InvalidUntypedConversion occurs when an there is no valid implicit - // conversion from an untyped value satisfying the type constraints of the - // context in which it is used. - // - // Example: - // var _ = 1 + "" - InvalidUntypedConversion - - /* offsetof */ - - // BadOffsetofSyntax occurs when unsafe.Offsetof is called with an argument - // that is not a selector expression. - // - // Example: - // import "unsafe" - // - // var x int - // var _ = unsafe.Offsetof(x) - BadOffsetofSyntax - - // InvalidOffsetof occurs when unsafe.Offsetof is called with a method - // selector, rather than a field selector, or when the field is embedded via - // a pointer. - // - // Per the spec: - // - // "If f is an embedded field, it must be reachable without pointer - // indirections through fields of the struct. " - // - // Example: - // import "unsafe" - // - // type T struct { f int } - // type S struct { *T } - // var s S - // var _ = unsafe.Offsetof(s.f) - // - // Example: - // import "unsafe" - // - // type S struct{} - // - // func (S) m() {} - // - // var s S - // var _ = unsafe.Offsetof(s.m) - InvalidOffsetof - - /* control flow > scope */ - - // UnusedExpr occurs when a side-effect free expression is used as a - // statement. Such a statement has no effect. - // - // Example: - // func f(i int) { - // i*i - // } - UnusedExpr - - // UnusedVar occurs when a variable is declared but unused. - // - // Example: - // func f() { - // x := 1 - // } - UnusedVar - - // MissingReturn occurs when a function with results is missing a return - // statement. - // - // Example: - // func f() int {} - MissingReturn - - // WrongResultCount occurs when a return statement returns an incorrect - // number of values. - // - // Example: - // func ReturnOne() int { - // return 1, 2 - // } - WrongResultCount - - // OutOfScopeResult occurs when the name of a value implicitly returned by - // an empty return statement is shadowed in a nested scope. - // - // Example: - // func factor(n int) (i int) { - // for i := 2; i < n; i++ { - // if n%i == 0 { - // return - // } - // } - // return 0 - // } - OutOfScopeResult - - /* control flow > if */ - - // InvalidCond occurs when an if condition is not a boolean expression. - // - // Example: - // func checkReturn(i int) { - // if i { - // panic("non-zero return") - // } - // } - InvalidCond - - /* control flow > for */ - - // InvalidPostDecl occurs when there is a declaration in a for-loop post - // statement. - // - // Example: - // func f() { - // for i := 0; i < 10; j := 0 {} - // } - InvalidPostDecl - - // InvalidChanRange occurs when a send-only channel used in a range - // expression. - // - // Example: - // func sum(c chan<- int) { - // s := 0 - // for i := range c { - // s += i - // } - // } - InvalidChanRange - - // InvalidIterVar occurs when two iteration variables are used while ranging - // over a channel. - // - // Example: - // func f(c chan int) { - // for k, v := range c { - // println(k, v) - // } - // } - InvalidIterVar - - // InvalidRangeExpr occurs when the type of a range expression is not array, - // slice, string, map, or channel. - // - // Example: - // func f(i int) { - // for j := range i { - // println(j) - // } - // } - InvalidRangeExpr - - /* control flow > switch */ - - // MisplacedBreak occurs when a break statement is not within a for, switch, - // or select statement of the innermost function definition. - // - // Example: - // func f() { - // break - // } - MisplacedBreak - - // MisplacedContinue occurs when a continue statement is not within a for - // loop of the innermost function definition. - // - // Example: - // func sumeven(n int) int { - // proceed := func() { - // continue - // } - // sum := 0 - // for i := 1; i <= n; i++ { - // if i % 2 != 0 { - // proceed() - // } - // sum += i - // } - // return sum - // } - MisplacedContinue - - // MisplacedFallthrough occurs when a fallthrough statement is not within an - // expression switch. - // - // Example: - // func typename(i interface{}) string { - // switch i.(type) { - // case int64: - // fallthrough - // case int: - // return "int" - // } - // return "unsupported" - // } - MisplacedFallthrough - - // DuplicateCase occurs when a type or expression switch has duplicate - // cases. - // - // Example: - // func printInt(i int) { - // switch i { - // case 1: - // println("one") - // case 1: - // println("One") - // } - // } - DuplicateCase - - // DuplicateDefault occurs when a type or expression switch has multiple - // default clauses. - // - // Example: - // func printInt(i int) { - // switch i { - // case 1: - // println("one") - // default: - // println("One") - // default: - // println("1") - // } - // } - DuplicateDefault - - // BadTypeKeyword occurs when a .(type) expression is used anywhere other - // than a type switch. - // - // Example: - // type I interface { - // m() - // } - // var t I - // var _ = t.(type) - BadTypeKeyword - - // InvalidTypeSwitch occurs when .(type) is used on an expression that is - // not of interface type. - // - // Example: - // func f(i int) { - // switch x := i.(type) {} - // } - InvalidTypeSwitch - - // InvalidExprSwitch occurs when a switch expression is not comparable. - // - // Example: - // func _() { - // var a struct{ _ func() } - // switch a /* ERROR cannot switch on a */ { - // } - // } - InvalidExprSwitch - - /* control flow > select */ - - // InvalidSelectCase occurs when a select case is not a channel send or - // receive. - // - // Example: - // func checkChan(c <-chan int) bool { - // select { - // case c: - // return true - // default: - // return false - // } - // } - InvalidSelectCase - - /* control flow > labels and jumps */ - - // UndeclaredLabel occurs when an undeclared label is jumped to. - // - // Example: - // func f() { - // goto L - // } - UndeclaredLabel - - // DuplicateLabel occurs when a label is declared more than once. - // - // Example: - // func f() int { - // L: - // L: - // return 1 - // } - DuplicateLabel - - // MisplacedLabel occurs when a break or continue label is not on a for, - // switch, or select statement. - // - // Example: - // func f() { - // L: - // a := []int{1,2,3} - // for _, e := range a { - // if e > 10 { - // break L - // } - // println(a) - // } - // } - MisplacedLabel - - // UnusedLabel occurs when a label is declared but not used. - // - // Example: - // func f() { - // L: - // } - UnusedLabel - - // JumpOverDecl occurs when a label jumps over a variable declaration. - // - // Example: - // func f() int { - // goto L - // x := 2 - // L: - // x++ - // return x - // } - JumpOverDecl - - // JumpIntoBlock occurs when a forward jump goes to a label inside a nested - // block. - // - // Example: - // func f(x int) { - // goto L - // if x > 0 { - // L: - // print("inside block") - // } - // } - JumpIntoBlock - - /* control flow > calls */ - - // InvalidMethodExpr occurs when a pointer method is called but the argument - // is not addressable. - // - // Example: - // type T struct {} - // - // func (*T) m() int { return 1 } - // - // var _ = T.m(T{}) - InvalidMethodExpr - - // WrongArgCount occurs when too few or too many arguments are passed by a - // function call. - // - // Example: - // func f(i int) {} - // var x = f() - WrongArgCount - - // InvalidCall occurs when an expression is called that is not of function - // type. - // - // Example: - // var x = "x" - // var y = x() - InvalidCall - - /* control flow > suspended */ - - // UnusedResults occurs when a restricted expression-only built-in function - // is suspended via go or defer. Such a suspension discards the results of - // these side-effect free built-in functions, and therefore is ineffectual. - // - // Example: - // func f(a []int) int { - // defer len(a) - // return i - // } - UnusedResults - - // InvalidDefer occurs when a deferred expression is not a function call, - // for example if the expression is a type conversion. - // - // Example: - // func f(i int) int { - // defer int32(i) - // return i - // } - InvalidDefer - - // InvalidGo occurs when a go expression is not a function call, for example - // if the expression is a type conversion. - // - // Example: - // func f(i int) int { - // go int32(i) - // return i - // } - InvalidGo - - // All codes below were added in Go 1.17. - - /* decl */ - - // BadDecl occurs when a declaration has invalid syntax. - BadDecl - - // RepeatedDecl occurs when an identifier occurs more than once on the left - // hand side of a short variable declaration. - // - // Example: - // func _() { - // x, y, y := 1, 2, 3 - // } - RepeatedDecl - - /* unsafe */ - - // InvalidUnsafeAdd occurs when unsafe.Add is called with a - // length argument that is not of integer type. - // - // Example: - // import "unsafe" - // - // var p unsafe.Pointer - // var _ = unsafe.Add(p, float64(1)) - InvalidUnsafeAdd - - // InvalidUnsafeSlice occurs when unsafe.Slice is called with a - // pointer argument that is not of pointer type or a length argument - // that is not of integer type, negative, or out of bounds. - // - // Example: - // import "unsafe" - // - // var x int - // var _ = unsafe.Slice(x, 1) - // - // Example: - // import "unsafe" - // - // var x int - // var _ = unsafe.Slice(&x, float64(1)) - // - // Example: - // import "unsafe" - // - // var x int - // var _ = unsafe.Slice(&x, -1) - // - // Example: - // import "unsafe" - // - // var x int - // var _ = unsafe.Slice(&x, uint64(1) << 63) - InvalidUnsafeSlice - - // All codes below were added in Go 1.18. - - /* features */ - - // UnsupportedFeature occurs when a language feature is used that is not - // supported at this Go version. - UnsupportedFeature - - /* type params */ - - // NotAGenericType occurs when a non-generic type is used where a generic - // type is expected: in type or function instantiation. - // - // Example: - // type T int - // - // var _ T[int] - NotAGenericType - - // WrongTypeArgCount occurs when a type or function is instantiated with an - // incorrent number of type arguments, including when a generic type or - // function is used without instantiation. - // - // Errors inolving failed type inference are assigned other error codes. - // - // Example: - // type T[p any] int - // - // var _ T[int, string] - // - // Example: - // func f[T any]() {} - // - // var x = f - WrongTypeArgCount - - // CannotInferTypeArgs occurs when type or function type argument inference - // fails to infer all type arguments. - // - // Example: - // func f[T any]() {} - // - // func _() { - // f() - // } - // - // Example: - // type N[P, Q any] struct{} - // - // var _ N[int] - CannotInferTypeArgs - - // InvalidTypeArg occurs when a type argument does not satisfy its - // corresponding type parameter constraints. - // - // Example: - // type T[P ~int] struct{} - // - // var _ T[string] - InvalidTypeArg // arguments? InferenceFailed - - // InvalidInstanceCycle occurs when an invalid cycle is detected - // within the instantiation graph. - // - // Example: - // func f[T any]() { f[*T]() } - InvalidInstanceCycle - - // InvalidUnion occurs when an embedded union or approximation element is - // not valid. - // - // Example: - // type _ interface { - // ~int | interface{ m() } - // } - InvalidUnion - - // MisplacedConstraintIface occurs when a constraint-type interface is used - // outside of constraint position. - // - // Example: - // type I interface { ~int } - // - // var _ I - MisplacedConstraintIface - - // InvalidMethodTypeParams occurs when methods have type parameters. - // - // It cannot be encountered with an AST parsed using go/parser. - InvalidMethodTypeParams - - // MisplacedTypeParam occurs when a type parameter is used in a place where - // it is not permitted. - // - // Example: - // type T[P any] P - // - // Example: - // type T[P any] struct{ *P } - MisplacedTypeParam - - // InvalidUnsafeSliceData occurs when unsafe.SliceData is called with - // an argument that is not of slice type. It also occurs if it is used - // in a package compiled for a language version before go1.20. - // - // Example: - // import "unsafe" - // - // var x int - // var _ = unsafe.SliceData(x) - InvalidUnsafeSliceData - - // InvalidUnsafeString occurs when unsafe.String is called with - // a length argument that is not of integer type, negative, or - // out of bounds. It also occurs if it is used in a package - // compiled for a language version before go1.20. - // - // Example: - // import "unsafe" - // - // var b [10]byte - // var _ = unsafe.String(&b[0], -1) - InvalidUnsafeString - - // InvalidUnsafeStringData occurs if it is used in a package - // compiled for a language version before go1.20. - _ // not used anymore - -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go b/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go deleted file mode 100644 index 15ecf7c5ded9..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go +++ /dev/null @@ -1,179 +0,0 @@ -// Code generated by "stringer -type=ErrorCode"; DO NOT EDIT. - -package typesinternal - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[InvalidSyntaxTree - -1] - _ = x[Test-1] - _ = x[BlankPkgName-2] - _ = x[MismatchedPkgName-3] - _ = x[InvalidPkgUse-4] - _ = x[BadImportPath-5] - _ = x[BrokenImport-6] - _ = x[ImportCRenamed-7] - _ = x[UnusedImport-8] - _ = x[InvalidInitCycle-9] - _ = x[DuplicateDecl-10] - _ = x[InvalidDeclCycle-11] - _ = x[InvalidTypeCycle-12] - _ = x[InvalidConstInit-13] - _ = x[InvalidConstVal-14] - _ = x[InvalidConstType-15] - _ = x[UntypedNilUse-16] - _ = x[WrongAssignCount-17] - _ = x[UnassignableOperand-18] - _ = x[NoNewVar-19] - _ = x[MultiValAssignOp-20] - _ = x[InvalidIfaceAssign-21] - _ = x[InvalidChanAssign-22] - _ = x[IncompatibleAssign-23] - _ = x[UnaddressableFieldAssign-24] - _ = x[NotAType-25] - _ = x[InvalidArrayLen-26] - _ = x[BlankIfaceMethod-27] - _ = x[IncomparableMapKey-28] - _ = x[InvalidIfaceEmbed-29] - _ = x[InvalidPtrEmbed-30] - _ = x[BadRecv-31] - _ = x[InvalidRecv-32] - _ = x[DuplicateFieldAndMethod-33] - _ = x[DuplicateMethod-34] - _ = x[InvalidBlank-35] - _ = x[InvalidIota-36] - _ = x[MissingInitBody-37] - _ = x[InvalidInitSig-38] - _ = x[InvalidInitDecl-39] - _ = x[InvalidMainDecl-40] - _ = x[TooManyValues-41] - _ = x[NotAnExpr-42] - _ = x[TruncatedFloat-43] - _ = x[NumericOverflow-44] - _ = x[UndefinedOp-45] - _ = x[MismatchedTypes-46] - _ = x[DivByZero-47] - _ = x[NonNumericIncDec-48] - _ = x[UnaddressableOperand-49] - _ = x[InvalidIndirection-50] - _ = x[NonIndexableOperand-51] - _ = x[InvalidIndex-52] - _ = x[SwappedSliceIndices-53] - _ = x[NonSliceableOperand-54] - _ = x[InvalidSliceExpr-55] - _ = x[InvalidShiftCount-56] - _ = x[InvalidShiftOperand-57] - _ = x[InvalidReceive-58] - _ = x[InvalidSend-59] - _ = x[DuplicateLitKey-60] - _ = x[MissingLitKey-61] - _ = x[InvalidLitIndex-62] - _ = x[OversizeArrayLit-63] - _ = x[MixedStructLit-64] - _ = x[InvalidStructLit-65] - _ = x[MissingLitField-66] - _ = x[DuplicateLitField-67] - _ = x[UnexportedLitField-68] - _ = x[InvalidLitField-69] - _ = x[UntypedLit-70] - _ = x[InvalidLit-71] - _ = x[AmbiguousSelector-72] - _ = x[UndeclaredImportedName-73] - _ = x[UnexportedName-74] - _ = x[UndeclaredName-75] - _ = x[MissingFieldOrMethod-76] - _ = x[BadDotDotDotSyntax-77] - _ = x[NonVariadicDotDotDot-78] - _ = x[MisplacedDotDotDot-79] - _ = x[InvalidDotDotDotOperand-80] - _ = x[InvalidDotDotDot-81] - _ = x[UncalledBuiltin-82] - _ = x[InvalidAppend-83] - _ = x[InvalidCap-84] - _ = x[InvalidClose-85] - _ = x[InvalidCopy-86] - _ = x[InvalidComplex-87] - _ = x[InvalidDelete-88] - _ = x[InvalidImag-89] - _ = x[InvalidLen-90] - _ = x[SwappedMakeArgs-91] - _ = x[InvalidMake-92] - _ = x[InvalidReal-93] - _ = x[InvalidAssert-94] - _ = x[ImpossibleAssert-95] - _ = x[InvalidConversion-96] - _ = x[InvalidUntypedConversion-97] - _ = x[BadOffsetofSyntax-98] - _ = x[InvalidOffsetof-99] - _ = x[UnusedExpr-100] - _ = x[UnusedVar-101] - _ = x[MissingReturn-102] - _ = x[WrongResultCount-103] - _ = x[OutOfScopeResult-104] - _ = x[InvalidCond-105] - _ = x[InvalidPostDecl-106] - _ = x[InvalidChanRange-107] - _ = x[InvalidIterVar-108] - _ = x[InvalidRangeExpr-109] - _ = x[MisplacedBreak-110] - _ = x[MisplacedContinue-111] - _ = x[MisplacedFallthrough-112] - _ = x[DuplicateCase-113] - _ = x[DuplicateDefault-114] - _ = x[BadTypeKeyword-115] - _ = x[InvalidTypeSwitch-116] - _ = x[InvalidExprSwitch-117] - _ = x[InvalidSelectCase-118] - _ = x[UndeclaredLabel-119] - _ = x[DuplicateLabel-120] - _ = x[MisplacedLabel-121] - _ = x[UnusedLabel-122] - _ = x[JumpOverDecl-123] - _ = x[JumpIntoBlock-124] - _ = x[InvalidMethodExpr-125] - _ = x[WrongArgCount-126] - _ = x[InvalidCall-127] - _ = x[UnusedResults-128] - _ = x[InvalidDefer-129] - _ = x[InvalidGo-130] - _ = x[BadDecl-131] - _ = x[RepeatedDecl-132] - _ = x[InvalidUnsafeAdd-133] - _ = x[InvalidUnsafeSlice-134] - _ = x[UnsupportedFeature-135] - _ = x[NotAGenericType-136] - _ = x[WrongTypeArgCount-137] - _ = x[CannotInferTypeArgs-138] - _ = x[InvalidTypeArg-139] - _ = x[InvalidInstanceCycle-140] - _ = x[InvalidUnion-141] - _ = x[MisplacedConstraintIface-142] - _ = x[InvalidMethodTypeParams-143] - _ = x[MisplacedTypeParam-144] - _ = x[InvalidUnsafeSliceData-145] - _ = x[InvalidUnsafeString-146] -} - -const ( - _ErrorCode_name_0 = "InvalidSyntaxTree" - _ErrorCode_name_1 = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilUseWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParamInvalidUnsafeSliceDataInvalidUnsafeString" -) - -var ( - _ErrorCode_index_1 = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 218, 234, 253, 261, 277, 295, 312, 330, 354, 362, 377, 393, 411, 428, 443, 450, 461, 484, 499, 511, 522, 537, 551, 566, 581, 594, 603, 617, 632, 643, 658, 667, 683, 703, 721, 740, 752, 771, 790, 806, 823, 842, 856, 867, 882, 895, 910, 926, 940, 956, 971, 988, 1006, 1021, 1031, 1041, 1058, 1080, 1094, 1108, 1128, 1146, 1166, 1184, 1207, 1223, 1238, 1251, 1261, 1273, 1284, 1298, 1311, 1322, 1332, 1347, 1358, 1369, 1382, 1398, 1415, 1439, 1456, 1471, 1481, 1490, 1503, 1519, 1535, 1546, 1561, 1577, 1591, 1607, 1621, 1638, 1658, 1671, 1687, 1701, 1718, 1735, 1752, 1767, 1781, 1795, 1806, 1818, 1831, 1848, 1861, 1872, 1885, 1897, 1906, 1913, 1925, 1941, 1959, 1977, 1992, 2009, 2028, 2042, 2062, 2074, 2098, 2121, 2139, 2161, 2180} -) - -func (i ErrorCode) String() string { - switch { - case i == -1: - return _ErrorCode_name_0 - case 1 <= i && i <= 146: - i -= 1 - return _ErrorCode_name_1[_ErrorCode_index_1[i]:_ErrorCode_index_1[i+1]] - default: - return "ErrorCode(" + strconv.FormatInt(int64(i), 10) + ")" - } -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/types.go b/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/types.go deleted file mode 100644 index ce7d4351b220..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/types.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package typesinternal provides access to internal go/types APIs that are not -// yet exported. -package typesinternal - -import ( - "go/token" - "go/types" - "reflect" - "unsafe" -) - -func SetUsesCgo(conf *types.Config) bool { - v := reflect.ValueOf(conf).Elem() - - f := v.FieldByName("go115UsesCgo") - if !f.IsValid() { - f = v.FieldByName("UsesCgo") - if !f.IsValid() { - return false - } - } - - addr := unsafe.Pointer(f.UnsafeAddr()) - *(*bool)(addr) = true - - return true -} - -// ReadGo116ErrorData extracts additional information from types.Error values -// generated by Go version 1.16 and later: the error code, start position, and -// end position. If all positions are valid, start <= err.Pos <= end. -// -// If the data could not be read, the final result parameter will be false. -func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos, ok bool) { - var data [3]int - // By coincidence all of these fields are ints, which simplifies things. - v := reflect.ValueOf(err) - for i, name := range []string{"go116code", "go116start", "go116end"} { - f := v.FieldByName(name) - if !f.IsValid() { - return 0, 0, 0, false - } - data[i] = int(f.Int()) - } - return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true -} - -var SetGoVersion = func(conf *types.Config, version string) bool { return false } diff --git a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/types_118.go b/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/types_118.go deleted file mode 100644 index a42b072a67d3..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/typesinternal/types_118.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.18 -// +build go1.18 - -package typesinternal - -import ( - "go/types" -) - -func init() { - SetGoVersion = func(conf *types.Config, version string) bool { - conf.GoVersion = version - return true - } -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/versions/BUILD.bazel b/go/extractor/vendor/golang.org/x/tools/internal/versions/BUILD.bazel deleted file mode 100644 index 85d428debf54..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/versions/BUILD.bazel +++ /dev/null @@ -1,17 +0,0 @@ -# generated running `bazel run //go/gazelle`, do not edit - -load("@rules_go//go:def.bzl", "go_library") - -go_library( - name = "versions", - srcs = [ - "gover.go", - "types.go", - "types_go121.go", - "types_go122.go", - "versions.go", - ], - importmap = "github.com/github/codeql-go/extractor/vendor/golang.org/x/tools/internal/versions", - importpath = "golang.org/x/tools/internal/versions", - visibility = ["//go/extractor/vendor/golang.org/x/tools:__subpackages__"], -) diff --git a/go/extractor/vendor/golang.org/x/tools/internal/versions/gover.go b/go/extractor/vendor/golang.org/x/tools/internal/versions/gover.go deleted file mode 100644 index bbabcd22e948..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/versions/gover.go +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This is a fork of internal/gover for use by x/tools until -// go1.21 and earlier are no longer supported by x/tools. - -package versions - -import "strings" - -// A gover is a parsed Go gover: major[.Minor[.Patch]][kind[pre]] -// The numbers are the original decimal strings to avoid integer overflows -// and since there is very little actual math. (Probably overflow doesn't matter in practice, -// but at the time this code was written, there was an existing test that used -// go1.99999999999, which does not fit in an int on 32-bit platforms. -// The "big decimal" representation avoids the problem entirely.) -type gover struct { - major string // decimal - minor string // decimal or "" - patch string // decimal or "" - kind string // "", "alpha", "beta", "rc" - pre string // decimal or "" -} - -// compare returns -1, 0, or +1 depending on whether -// x < y, x == y, or x > y, interpreted as toolchain versions. -// The versions x and y must not begin with a "go" prefix: just "1.21" not "go1.21". -// Malformed versions compare less than well-formed versions and equal to each other. -// The language version "1.21" compares less than the release candidate and eventual releases "1.21rc1" and "1.21.0". -func compare(x, y string) int { - vx := parse(x) - vy := parse(y) - - if c := cmpInt(vx.major, vy.major); c != 0 { - return c - } - if c := cmpInt(vx.minor, vy.minor); c != 0 { - return c - } - if c := cmpInt(vx.patch, vy.patch); c != 0 { - return c - } - if c := strings.Compare(vx.kind, vy.kind); c != 0 { // "" < alpha < beta < rc - return c - } - if c := cmpInt(vx.pre, vy.pre); c != 0 { - return c - } - return 0 -} - -// lang returns the Go language version. For example, lang("1.2.3") == "1.2". -func lang(x string) string { - v := parse(x) - if v.minor == "" || v.major == "1" && v.minor == "0" { - return v.major - } - return v.major + "." + v.minor -} - -// isValid reports whether the version x is valid. -func isValid(x string) bool { - return parse(x) != gover{} -} - -// parse parses the Go version string x into a version. -// It returns the zero version if x is malformed. -func parse(x string) gover { - var v gover - - // Parse major version. - var ok bool - v.major, x, ok = cutInt(x) - if !ok { - return gover{} - } - if x == "" { - // Interpret "1" as "1.0.0". - v.minor = "0" - v.patch = "0" - return v - } - - // Parse . before minor version. - if x[0] != '.' { - return gover{} - } - - // Parse minor version. - v.minor, x, ok = cutInt(x[1:]) - if !ok { - return gover{} - } - if x == "" { - // Patch missing is same as "0" for older versions. - // Starting in Go 1.21, patch missing is different from explicit .0. - if cmpInt(v.minor, "21") < 0 { - v.patch = "0" - } - return v - } - - // Parse patch if present. - if x[0] == '.' { - v.patch, x, ok = cutInt(x[1:]) - if !ok || x != "" { - // Note that we are disallowing prereleases (alpha, beta, rc) for patch releases here (x != ""). - // Allowing them would be a bit confusing because we already have: - // 1.21 < 1.21rc1 - // But a prerelease of a patch would have the opposite effect: - // 1.21.3rc1 < 1.21.3 - // We've never needed them before, so let's not start now. - return gover{} - } - return v - } - - // Parse prerelease. - i := 0 - for i < len(x) && (x[i] < '0' || '9' < x[i]) { - if x[i] < 'a' || 'z' < x[i] { - return gover{} - } - i++ - } - if i == 0 { - return gover{} - } - v.kind, x = x[:i], x[i:] - if x == "" { - return v - } - v.pre, x, ok = cutInt(x) - if !ok || x != "" { - return gover{} - } - - return v -} - -// cutInt scans the leading decimal number at the start of x to an integer -// and returns that value and the rest of the string. -func cutInt(x string) (n, rest string, ok bool) { - i := 0 - for i < len(x) && '0' <= x[i] && x[i] <= '9' { - i++ - } - if i == 0 || x[0] == '0' && i != 1 { // no digits or unnecessary leading zero - return "", "", false - } - return x[:i], x[i:], true -} - -// cmpInt returns cmp.Compare(x, y) interpreting x and y as decimal numbers. -// (Copied from golang.org/x/mod/semver's compareInt.) -func cmpInt(x, y string) int { - if x == y { - return 0 - } - if len(x) < len(y) { - return -1 - } - if len(x) > len(y) { - return +1 - } - if x < y { - return -1 - } else { - return +1 - } -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/versions/types.go b/go/extractor/vendor/golang.org/x/tools/internal/versions/types.go deleted file mode 100644 index 562eef21fa20..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/versions/types.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package versions - -import ( - "go/types" -) - -// GoVersion returns the Go version of the type package. -// It returns zero if no version can be determined. -func GoVersion(pkg *types.Package) string { - // TODO(taking): x/tools can call GoVersion() [from 1.21] after 1.25. - if pkg, ok := any(pkg).(interface{ GoVersion() string }); ok { - return pkg.GoVersion() - } - return "" -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/versions/types_go121.go b/go/extractor/vendor/golang.org/x/tools/internal/versions/types_go121.go deleted file mode 100644 index a7b79207aeeb..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/versions/types_go121.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.22 -// +build !go1.22 - -package versions - -import ( - "go/ast" - "go/types" -) - -// FileVersions always reports the a file's Go version as the -// zero version at this Go version. -func FileVersions(info *types.Info, file *ast.File) string { return "" } - -// InitFileVersions is a noop at this Go version. -func InitFileVersions(*types.Info) {} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/versions/types_go122.go b/go/extractor/vendor/golang.org/x/tools/internal/versions/types_go122.go deleted file mode 100644 index 7b9ba89a8220..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/versions/types_go122.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.22 -// +build go1.22 - -package versions - -import ( - "go/ast" - "go/types" -) - -// FileVersions maps a file to the file's semantic Go version. -// The reported version is the zero version if a version cannot be determined. -func FileVersions(info *types.Info, file *ast.File) string { - return info.FileVersions[file] -} - -// InitFileVersions initializes info to record Go versions for Go files. -func InitFileVersions(info *types.Info) { - info.FileVersions = make(map[*ast.File]string) -} diff --git a/go/extractor/vendor/golang.org/x/tools/internal/versions/versions.go b/go/extractor/vendor/golang.org/x/tools/internal/versions/versions.go deleted file mode 100644 index e16f6c33a523..000000000000 --- a/go/extractor/vendor/golang.org/x/tools/internal/versions/versions.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package versions - -// Note: If we use build tags to use go/versions when go >=1.22, -// we run into go.dev/issue/53737. Under some operations users would see an -// import of "go/versions" even if they would not compile the file. -// For example, during `go get -u ./...` (go.dev/issue/64490) we do not try to include -// For this reason, this library just a clone of go/versions for the moment. - -// Lang returns the Go language version for version x. -// If x is not a valid version, Lang returns the empty string. -// For example: -// -// Lang("go1.21rc2") = "go1.21" -// Lang("go1.21.2") = "go1.21" -// Lang("go1.21") = "go1.21" -// Lang("go1") = "go1" -// Lang("bad") = "" -// Lang("1.21") = "" -func Lang(x string) string { - v := lang(stripGo(x)) - if v == "" { - return "" - } - return x[:2+len(v)] // "go"+v without allocation -} - -// Compare returns -1, 0, or +1 depending on whether -// x < y, x == y, or x > y, interpreted as Go versions. -// The versions x and y must begin with a "go" prefix: "go1.21" not "1.21". -// Invalid versions, including the empty string, compare less than -// valid versions and equal to each other. -// The language version "go1.21" compares less than the -// release candidate and eventual releases "go1.21rc1" and "go1.21.0". -// Custom toolchain suffixes are ignored during comparison: -// "go1.21.0" and "go1.21.0-bigcorp" are equal. -func Compare(x, y string) int { return compare(stripGo(x), stripGo(y)) } - -// IsValid reports whether the version x is valid. -func IsValid(x string) bool { return isValid(stripGo(x)) } - -// stripGo converts from a "go1.21" version to a "1.21" version. -// If v does not start with "go", stripGo returns the empty string (a known invalid version). -func stripGo(v string) string { - if len(v) < 2 || v[:2] != "go" { - return "" - } - return v[2:] -} diff --git a/go/extractor/vendor/modules.txt b/go/extractor/vendor/modules.txt deleted file mode 100644 index 5687615f62c3..000000000000 --- a/go/extractor/vendor/modules.txt +++ /dev/null @@ -1,25 +0,0 @@ -# golang.org/x/mod v0.15.0 -## explicit; go 1.18 -golang.org/x/mod/internal/lazyregexp -golang.org/x/mod/modfile -golang.org/x/mod/module -golang.org/x/mod/semver -# golang.org/x/tools v0.18.0 -## explicit; go 1.18 -golang.org/x/tools/go/gcexportdata -golang.org/x/tools/go/internal/packagesdriver -golang.org/x/tools/go/packages -golang.org/x/tools/go/types/objectpath -golang.org/x/tools/internal/event -golang.org/x/tools/internal/event/core -golang.org/x/tools/internal/event/keys -golang.org/x/tools/internal/event/label -golang.org/x/tools/internal/event/tag -golang.org/x/tools/internal/gcimporter -golang.org/x/tools/internal/gocommand -golang.org/x/tools/internal/packagesinternal -golang.org/x/tools/internal/pkgbits -golang.org/x/tools/internal/tokeninternal -golang.org/x/tools/internal/typeparams -golang.org/x/tools/internal/typesinternal -golang.org/x/tools/internal/versions diff --git a/go/gen.py b/go/gen.py index e04dea0b5e98..eb74db7bddd9 100644 --- a/go/gen.py +++ b/go/gen.py @@ -41,15 +41,8 @@ def options(): go, gazelle, go_gen_dbscheme = map(r.Rlocation, opts.executables) -if opts.force: - print("clearing vendor directory") - shutil.rmtree(go_extractor_dir / "vendor") - existing_build_files = set(go_extractor_dir.glob("*/**/BUILD.bazel")) -print("updating vendor directory") -subprocess.check_call([go, "-C", go_extractor_dir, "mod", "vendor"]) - if opts.force: print("clearing generated BUILD files") for build_file in existing_build_files: @@ -64,8 +57,6 @@ def options(): if not opts.force: # otherwise, subtract the files that existed at the start build_files_to_update -= existing_build_files - # but bring back the `vendor` ones, as the vendor update step always clears them - build_files_to_update.update(go_extractor_dir.glob("vendor/**/BUILD.bazel")) print("adding header to newly generated BUILD files") for build_file in build_files_to_update: diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 86a6976ddc7c..bdc66d513224 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.4.md b/go/ql/consistency-queries/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 9b2caee82c24..e3561decdf01 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.3 +version: 1.0.4 groups: - go - queries diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/build-environment.expected b/go/ql/integration-tests/all-platforms/go/extract-vendor/build-environment.expected new file mode 100644 index 000000000000..0b225ce00857 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/build-environment.expected @@ -0,0 +1,5 @@ +{ + "configuration" : { + "go" : { } + } +} diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/extract-vendor/diagnostics.expected new file mode 100644 index 000000000000..56d774b7037c --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/diagnostics.expected @@ -0,0 +1,14 @@ +{ + "markdownMessage": "A single `go.mod` file was found.\n\n`go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/single-root-go-mod-found", + "name": "A single `go.mod` file was found in the root" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/force_sequential_test_execution b/go/ql/integration-tests/all-platforms/go/extract-vendor/force_sequential_test_execution new file mode 100644 index 000000000000..47ca99290999 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/force_sequential_test_execution @@ -0,0 +1,2 @@ +# go get has been observed to sometimes fail when multiple tests try to simultaneously fetch the same package. +goget diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.mod b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.mod new file mode 100644 index 000000000000..bfb907e7b813 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.mod @@ -0,0 +1,5 @@ +go 1.14 + +require example.com/test v0.1.0 + +module test diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.sum b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.sum new file mode 100644 index 000000000000..77b7c845ca63 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/go.sum @@ -0,0 +1 @@ +example.com/test v0.1.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/test.go b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/test.go new file mode 100644 index 000000000000..1939e3478d48 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/test.go @@ -0,0 +1,11 @@ +package test + +import ( + subdir "example.com/test" +) + +func Test() { + + foo := subdir.Add(2, 2) + println(foo) +} diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/example.com/test/add.go b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/example.com/test/add.go new file mode 100644 index 000000000000..b1ce6a2a3a39 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/example.com/test/add.go @@ -0,0 +1,5 @@ +package test + +func Add(a, b int) int { + return a + b +} diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/modules.txt b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/modules.txt new file mode 100644 index 000000000000..023bcb386e2d --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/src/vendor/modules.txt @@ -0,0 +1,3 @@ +# example.com/test v0.1.0 +## explicit; go 1.14 +example.com/test diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/test.expected b/go/ql/integration-tests/all-platforms/go/extract-vendor/test.expected new file mode 100644 index 000000000000..d03518bd540f --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/test.expected @@ -0,0 +1,5 @@ +extractedFiles +| src/go.mod:0:0:0:0 | src/go.mod | +| src/test.go:0:0:0:0 | src/test.go | +| src/vendor/example.com/test/add.go:0:0:0:0 | src/vendor/example.com/test/add.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/test.py b/go/ql/integration-tests/all-platforms/go/extract-vendor/test.py new file mode 100644 index 000000000000..2bd482201b8b --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/test.py @@ -0,0 +1,4 @@ +from go_integration_test import * + +os.environ['CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS'] = "true" +go_integration_test() diff --git a/go/ql/integration-tests/all-platforms/go/extract-vendor/test.ql b/go/ql/integration-tests/all-platforms/go/extract-vendor/test.ql new file mode 100644 index 000000000000..459a43015602 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/extract-vendor/test.ql @@ -0,0 +1,8 @@ +import go +import semmle.go.DiagnosticsReporting + +query predicate extractedFiles(File f) { any() } + +from string msg, int sev +where reportableDiagnostics(_, msg, sev) +select msg, sev diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 875c2809beb3..ed4e9b3750f8 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.3 + +### Minor Analysis Improvements + +* There was a bug which meant that the built-in function `clear` was considered as a sanitizer in some cases when it shouldn't have been. This has now been fixed, which may lead to more alerts. + ## 1.1.2 ### Minor Analysis Improvements diff --git a/go/ql/lib/change-notes/released/1.1.3.md b/go/ql/lib/change-notes/released/1.1.3.md new file mode 100644 index 000000000000..d97cd24d93ca --- /dev/null +++ b/go/ql/lib/change-notes/released/1.1.3.md @@ -0,0 +1,5 @@ +## 1.1.3 + +### Minor Analysis Improvements + +* There was a bug which meant that the built-in function `clear` was considered as a sanitizer in some cases when it shouldn't have been. This has now been fixed, which may lead to more alerts. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 53ab127707fc..35e710ab1bf0 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 1.1.3 diff --git a/go/ql/lib/ext/empty.model.yml b/go/ql/lib/ext/empty.model.yml index 867714a30443..8d661a9f1db6 100644 --- a/go/ql/lib/ext/empty.model.yml +++ b/go/ql/lib/ext/empty.model.yml @@ -17,3 +17,7 @@ extensions: pack: codeql/go-all extensible: neutralModel data: [] + - addsTo: + pack: codeql/go-all + extensible: packageGrouping + data: [] diff --git a/go/ql/lib/ext/github.com.astaxie.beego.context.model.yml b/go/ql/lib/ext/github.com.astaxie.beego.context.model.yml deleted file mode 100644 index 5a41e55b6db4..000000000000 --- a/go/ql/lib/ext/github.com.astaxie.beego.context.model.yml +++ /dev/null @@ -1,58 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: summaryModel - data: - - ["github.com/astaxie/beego/context", "", False, "WriteBody", "", "", "Argument[2]", "Argument[1]", "taint", "manual"] - - ["github.com/beego/beego/server/web/context", "", False, "WriteBody", "", "", "Argument[2]", "Argument[1]", "taint", "manual"] - - addsTo: - pack: codeql/go-all - extensible: sourceModel - data: - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Bind", "", "", "Argument[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Cookie", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Data", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "GetData", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Header", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Param", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Params", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Query", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Refer", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "Referer", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "RequestBody", "", "", "", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "URI", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "URL", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "BeegoInput", True, "UserAgent", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego/context", "Context", True, "GetCookie", "", "", "ReturnValue", "remote", "manual"] - - - ["github.com/beego/beego/context", "BeegoInput", True, "Bind", "", "", "Argument[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "Cookie", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "Data", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "GetData", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "Header", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "Param", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "Params", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "Query", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "Refer", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "Referer", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "RequestBody", "", "", "", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "URI", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "URL", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "BeegoInput", True, "UserAgent", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/context", "Context", True, "GetCookie", "", "", "ReturnValue", "remote", "manual"] - - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Bind", "", "", "Argument[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Cookie", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Data", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "GetData", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Header", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Param", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Params", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Query", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Refer", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "Referer", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "RequestBody", "", "", "", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "URI", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "URL", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "BeegoInput", True, "UserAgent", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web/context", "Context", True, "GetCookie", "", "", "ReturnValue", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.astaxie.beego.model.yml b/go/ql/lib/ext/github.com.astaxie.beego.model.yml deleted file mode 100644 index 27a9c9cb5904..000000000000 --- a/go/ql/lib/ext/github.com.astaxie.beego.model.yml +++ /dev/null @@ -1,48 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: summaryModel - data: - - ["github.com/astaxie/beego", "", False, "HTML2str", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego", "", False, "Htmlquote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego", "", False, "Htmlunquote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego", "", False, "MapGet", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["github.com/astaxie/beego", "", False, "ParseForm", "", "", "Argument[0]", "Argument[1]", "taint", "manual"] - - ["github.com/astaxie/beego", "", False, "Str2html", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego", "", False, "Substr", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego", "", False, "HTML2str", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego", "", False, "Htmlquote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego", "", False, "Htmlunquote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego", "", False, "MapGet", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["github.com/beego/beego", "", False, "ParseForm", "", "", "Argument[0]", "Argument[1]", "taint", "manual"] - - ["github.com/beego/beego", "", False, "Str2html", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego", "", False, "Substr", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/server/web", "", False, "HTML2str", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/server/web", "", False, "Htmlquote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/server/web", "", False, "Htmlunquote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/server/web", "", False, "MapGet", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["github.com/beego/beego/server/web", "", False, "ParseForm", "", "", "Argument[0]", "Argument[1]", "taint", "manual"] - - ["github.com/beego/beego/server/web", "", False, "Str2html", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/server/web", "", False, "Substr", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - addsTo: - pack: codeql/go-all - extensible: sourceModel - data: - - ["github.com/astaxie/beego", "Controller", True, "ParseForm", "", "", "Argument[0]", "remote", "manual"] - - ["github.com/astaxie/beego", "Controller", True, "GetFile", "", "", "ReturnValue[0..1]", "remote", "manual"] - - ["github.com/astaxie/beego", "Controller", True, "GetFiles", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego", "Controller", True, "GetString", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego", "Controller", True, "GetStrings", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/astaxie/beego", "Controller", True, "Input", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego", "Controller", True, "ParseForm", "", "", "Argument[0]", "remote", "manual"] - - ["github.com/beego/beego", "Controller", True, "GetFile", "", "", "ReturnValue[0..1]", "remote", "manual"] - - ["github.com/beego/beego", "Controller", True, "GetFiles", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego", "Controller", True, "GetString", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego", "Controller", True, "GetStrings", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego", "Controller", True, "Input", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web", "Controller", True, "ParseForm", "", "", "Argument[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web", "Controller", True, "GetFile", "", "", "ReturnValue[0..1]", "remote", "manual"] - - ["github.com/beego/beego/server/web", "Controller", True, "GetFiles", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web", "Controller", True, "GetString", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web", "Controller", True, "GetStrings", "", "", "ReturnValue[0]", "remote", "manual"] - - ["github.com/beego/beego/server/web", "Controller", True, "Input", "", "", "ReturnValue[0]", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.astaxie.beego.utils.model.yml b/go/ql/lib/ext/github.com.astaxie.beego.utils.model.yml deleted file mode 100644 index 261c1dab61a9..000000000000 --- a/go/ql/lib/ext/github.com.astaxie.beego.utils.model.yml +++ /dev/null @@ -1,31 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: summaryModel - data: - - ["github.com/astaxie/beego/utils", "", False, "SliceChunk", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SliceDiff", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SliceFilter", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SliceIntersect", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SliceMerge", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SlicePad", "", "", "Argument[0..2]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SliceRand", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SliceReduce", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SliceShuffle", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "", False, "SliceUnique", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "BeeMap", True, "Get", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "BeeMap", True, "Items", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/astaxie/beego/utils", "BeeMap", True, "Set", "", "", "Argument[1]", "Argument[receiver]", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceChunk", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceDiff", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceFilter", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceIntersect", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceMerge", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SlicePad", "", "", "Argument[0..2]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceRand", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceReduce", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceShuffle", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "", False, "SliceUnique", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "BeeMap", True, "Get", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "BeeMap", True, "Items", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/beego/beego/core/utils", "BeeMap", True, "Set", "", "", "Argument[1]", "Argument[receiver]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.beego.beego.core.utils.model.yml b/go/ql/lib/ext/github.com.beego.beego.core.utils.model.yml new file mode 100644 index 000000000000..4eb0688e37e7 --- /dev/null +++ b/go/ql/lib/ext/github.com.beego.beego.core.utils.model.yml @@ -0,0 +1,25 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: packageGrouping + data: + - ["beego-utils", "github.com/astaxie/beego/utils"] + - ["beego-utils", "github.com/beego/beego/utils"] + - ["beego-utils", "github.com/beego/beego/core/utils"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["group:beego-utils", "", False, "SliceChunk", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SliceDiff", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SliceFilter", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SliceIntersect", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SliceMerge", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SlicePad", "", "", "Argument[0..2]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SliceRand", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SliceReduce", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SliceShuffle", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "", False, "SliceUnique", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "BeeMap", True, "Get", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "BeeMap", True, "Items", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:beego-utils", "BeeMap", True, "Set", "", "", "Argument[1]", "Argument[receiver]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.beego.beego.server.web.context.model.yml b/go/ql/lib/ext/github.com.beego.beego.server.web.context.model.yml new file mode 100644 index 000000000000..89f8eeebfba4 --- /dev/null +++ b/go/ql/lib/ext/github.com.beego.beego.server.web.context.model.yml @@ -0,0 +1,32 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: packageGrouping + data: + - ["beego-context", "github.com/astaxie/beego/context"] + - ["beego-context", "github.com/beego/beego/context"] + - ["beego-context", "github.com/beego/beego/server/web/context"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["group:beego-context", "", False, "WriteBody", "", "", "Argument[2]", "Argument[1]", "taint", "manual"] + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["group:beego-context", "BeegoInput", True, "Bind", "", "", "Argument[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "Cookie", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "Data", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "GetData", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "Header", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "Param", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "Params", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "Query", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "Refer", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "Referer", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "RequestBody", "", "", "", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "URI", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "URL", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "BeegoInput", True, "UserAgent", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego-context", "Context", True, "GetCookie", "", "", "ReturnValue", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.beego.beego.server.web.model.yml b/go/ql/lib/ext/github.com.beego.beego.server.web.model.yml new file mode 100644 index 000000000000..ee14aa224d4f --- /dev/null +++ b/go/ql/lib/ext/github.com.beego.beego.server.web.model.yml @@ -0,0 +1,29 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: packageGrouping + data: + - ["beego", "github.com/astaxie/beego"] + - ["beego", "github.com/beego/beego"] + - ["beego", "github.com/beego/beego/server/web"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["group:beego", "", False, "HTML2str", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego", "", False, "Htmlquote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego", "", False, "Htmlunquote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego", "", False, "MapGet", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["group:beego", "", False, "ParseForm", "", "", "Argument[0]", "Argument[1]", "taint", "manual"] + - ["group:beego", "", False, "Str2html", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:beego", "", False, "Substr", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["group:beego", "Controller", True, "ParseForm", "", "", "Argument[0]", "remote", "manual"] + - ["group:beego", "Controller", True, "GetFile", "", "", "ReturnValue[0..1]", "remote", "manual"] + - ["group:beego", "Controller", True, "GetFiles", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego", "Controller", True, "GetString", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego", "Controller", True, "GetStrings", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:beego", "Controller", True, "Input", "", "", "ReturnValue[0]", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.couchbase.gocb.model.yml b/go/ql/lib/ext/github.com.couchbase.gocb.model.yml new file mode 100644 index 000000000000..ff0a4c22c8de --- /dev/null +++ b/go/ql/lib/ext/github.com.couchbase.gocb.model.yml @@ -0,0 +1,30 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: packageGrouping + data: + - ["gocb", "github.com/couchbase/gocb"] + - ["gocb", "gopkg.in/couchbase/gocb"] + - ["gocb", "github.com/couchbaselabs/gocb"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["group:gocb", "", False, "NewAnalyticsQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "", False, "NewN1qlQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "ContextId", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "Deferred", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "Pretty", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "Priority", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "RawParam", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "AnalyticsQuery", True, "ServerSideTimeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "AdHoc", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "Consistency", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "ConsistentWith", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "Custom", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "PipelineBatch", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "PipelineCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "Profile", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "ReadOnly", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "ScanCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:gocb", "N1qlQuery", True, "Timeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.elazarl.goproxy.model.yml b/go/ql/lib/ext/github.com.elazarl.goproxy.model.yml index 28fe818ff67b..20e4a26f1cdb 100644 --- a/go/ql/lib/ext/github.com.elazarl.goproxy.model.yml +++ b/go/ql/lib/ext/github.com.elazarl.goproxy.model.yml @@ -5,3 +5,10 @@ extensions: data: - ["github.com/elazarl/goproxy", "CertStorage", True, "Fetch", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] - ["github.com/elazarl/goproxy", "CertStorage", True, "Fetch", "", "", "Argument[1]", "ReturnValue[0]", "taint", "manual"] + + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/elazarl/goproxy", "ProxyCtx", True, "UserData", "", "", "", "remote", "manual"] + - ["github.com/elazarl/goproxy", "ProxyCtx", True, "Charset", "", "", "ReturnValue", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.emicklei.go-restful.model.yml b/go/ql/lib/ext/github.com.emicklei.go-restful.model.yml new file mode 100644 index 000000000000..45043709c0d9 --- /dev/null +++ b/go/ql/lib/ext/github.com.emicklei.go-restful.model.yml @@ -0,0 +1,12 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/emicklei/go-restful", "Request", True, "QueryParameters", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .ArrayElement + - ["github.com/emicklei/go-restful", "Request", True, "QueryParameter", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/emicklei/go-restful", "Request", True, "BodyParameter", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/emicklei/go-restful", "Request", True, "HeaderParameter", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/emicklei/go-restful", "Request", True, "PathParameter", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/emicklei/go-restful", "Request", True, "PathParameters", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue + - ["github.com/emicklei/go-restful", "Request", True, "ReadEntity", "", "", "Argument[0]", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.gin-gonic.gin.model.yml b/go/ql/lib/ext/github.com.gin-gonic.gin.model.yml index 148b7d8cead2..22d81ce946b0 100644 --- a/go/ql/lib/ext/github.com.gin-gonic.gin.model.yml +++ b/go/ql/lib/ext/github.com.gin-gonic.gin.model.yml @@ -5,3 +5,53 @@ extensions: data: - ["github.com/gin-gonic/gin", "Params", True, "ByName", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - ["github.com/gin-gonic/gin", "Params", True, "Get", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/gin-gonic/gin", "Context", True, "Accepted", "", "", "", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "Bind", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "BindHeader", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "BindJSON", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "BindQuery", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "BindXML", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "BindYAML", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "BindUri", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "BindWith", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ClientIP", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ContentType", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "Cookie", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "DefaultPostForm", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "DefaultQuery", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "FullPath", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "GetHeader", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "GetPostForm", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "GetPostFormArray", "", "", "ReturnValue[0]", "remote", "manual"] # TODO: when sources can have access paths, use .ArrayElement + - ["github.com/gin-gonic/gin", "Context", True, "GetPostFormMap", "", "", "ReturnValue[0]", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue (and .MapKey?) + - ["github.com/gin-gonic/gin", "Context", True, "GetQuery", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "GetQueryArray", "", "", "ReturnValue[0]", "remote", "manual"] # TODO: when sources can have access paths, use .ArrayElement + - ["github.com/gin-gonic/gin", "Context", True, "GetQueryMap", "", "", "ReturnValue[0]", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue (and .MapKey?) + - ["github.com/gin-gonic/gin", "Context", True, "GetRawData", "", "", "ReturnValue[0]", "remote", "manual"] # TODO: when sources can have access paths, use .ArrayElement + - ["github.com/gin-gonic/gin", "Context", True, "GetString", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "GetStringMap", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue (and .MapKey?) + - ["github.com/gin-gonic/gin", "Context", True, "GetStringMapString", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue (and .MapKey?) + - ["github.com/gin-gonic/gin", "Context", True, "GetStringMapStringSlice", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue.ArrayElement (and .MapKey?) + - ["github.com/gin-gonic/gin", "Context", True, "GetStringSlice", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .ArrayElement + - ["github.com/gin-gonic/gin", "Context", True, "MustBindWith", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "Param", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "Params", "", "", "", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "PostForm", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "PostFormArray", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .ArrayElement + - ["github.com/gin-gonic/gin", "Context", True, "PostFormMap", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue (and .MapKey?) + - ["github.com/gin-gonic/gin", "Context", True, "Query", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "QueryArray", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .ArrayElement + - ["github.com/gin-gonic/gin", "Context", True, "QueryMap", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue (and .MapKey?) + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBind", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBindBodyWith", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBindHeader", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBindJSON", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBindQuery", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBindUri", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBindWith", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBindXML", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gin-gonic/gin", "Context", True, "ShouldBindYAML", "", "", "Argument[0]", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.go-chi.chi.model.yml b/go/ql/lib/ext/github.com.go-chi.chi.model.yml new file mode 100644 index 000000000000..10cb0333aff7 --- /dev/null +++ b/go/ql/lib/ext/github.com.go-chi.chi.model.yml @@ -0,0 +1,8 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/go-chi/chi", "", True, "URLParam", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/go-chi/chi", "", True, "URLParamFromCtx", "", "", "ReturnValue", "remote", "manual"] + - ["github.com/go-chi/chi", "Context", True, "URLParam", "", "", "ReturnValue", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.go-jose.go-jose.jwt.model.yml b/go/ql/lib/ext/github.com.go-jose.go-jose.jwt.model.yml new file mode 100644 index 000000000000..21cace225149 --- /dev/null +++ b/go/ql/lib/ext/github.com.go-jose.go-jose.jwt.model.yml @@ -0,0 +1,21 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: packageGrouping + data: + - ["go-jose/jwt", "github.com/go-jose/go-jose/jwt"] + - ["go-jose/jwt", "gopkg.in/square/go-jose/jwt"] + - ["go-jose/jwt", "github.com/square/go-jose/jwt"] + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["group:go-jose/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[receiver]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["group:go-jose/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["group:go-jose/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["group:go-jose/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["group:go-jose/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml b/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml deleted file mode 100644 index 0935396badaa..000000000000 --- a/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml +++ /dev/null @@ -1,14 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["github.com/go-jose/go-jose/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[receiver]", "jwt", "manual"] - - addsTo: - pack: codeql/go-all - extensible: summaryModel - data: - - ["github.com/go-jose/go-jose/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["github.com/go-jose/go-jose/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["github.com/go-jose/go-jose/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["github.com/go-jose/go-jose/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.gobwas.ws.model.yml b/go/ql/lib/ext/github.com.gobwas.ws.model.yml new file mode 100644 index 000000000000..bb03c8220c88 --- /dev/null +++ b/go/ql/lib/ext/github.com.gobwas.ws.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/gobwas/ws", "", True, "ReadFrame", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/gobwas/ws", "", True, "ReadHeader", "", "", "ReturnValue[0]", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.golang.protobuf.proto.model.yml b/go/ql/lib/ext/github.com.golang.protobuf.proto.model.yml new file mode 100644 index 000000000000..8513d1198164 --- /dev/null +++ b/go/ql/lib/ext/github.com.golang.protobuf.proto.model.yml @@ -0,0 +1,9 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["github.com/golang/protobuf/proto", "", False, "Clone", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["github.com/golang/protobuf/proto", "", False, "Marshal", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang/protobuf/proto", "", False, "Merge", "", "", "Argument[1]", "Argument[0]", "taint", "manual"] + - ["github.com/golang/protobuf/proto", "", False, "Unmarshal", "", "", "Argument[0]", "Argument[1]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.gorilla.mux.model.yml b/go/ql/lib/ext/github.com.gorilla.mux.model.yml new file mode 100644 index 000000000000..438abdf559a4 --- /dev/null +++ b/go/ql/lib/ext/github.com.gorilla.mux.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/gorilla/mux", "", True, "Vars", "", "", "ReturnValue", "remote", "manual"] # TODO: when sources can have access paths, use .MapValue (and .MapKey?) diff --git a/go/ql/lib/ext/github.com.gorilla.websocket.model.yml b/go/ql/lib/ext/github.com.gorilla.websocket.model.yml new file mode 100644 index 000000000000..a4dafa18b0b2 --- /dev/null +++ b/go/ql/lib/ext/github.com.gorilla.websocket.model.yml @@ -0,0 +1,8 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/gorilla/websocket", "", True, "ReadJSON", "", "", "Argument[1]", "remote", "manual"] + - ["github.com/gorilla/websocket", "Conn", True, "ReadJSON", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/gorilla/websocket", "Conn", True, "ReadMessage", "", "", "ReturnValue[1]", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.labstack.echo.model.yml b/go/ql/lib/ext/github.com.labstack.echo.model.yml index 41de417d5c2b..21e637a3b65b 100644 --- a/go/ql/lib/ext/github.com.labstack.echo.model.yml +++ b/go/ql/lib/ext/github.com.labstack.echo.model.yml @@ -5,3 +5,20 @@ extensions: data: - ["github.com/labstack/echo", "Context", True, "Get", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - ["github.com/labstack/echo", "Context", True, "Set", "", "", "Argument[1]", "Argument[receiver]", "taint", "manual"] + + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/labstack/echo", "Context", True, "Bind", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "Param", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "ParamValues", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "QueryParam", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "QueryParams", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "QueryString", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "FormValue", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "FormParams", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "FormFile", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "MultipartForm", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "Cookie", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/labstack/echo", "Context", True, "Cookies", "", "", "ReturnValue[0]", "remote", "manual"] diff --git a/go/ql/lib/ext/github.com.revel.revel.model.yml b/go/ql/lib/ext/github.com.revel.revel.model.yml index 099e26d05e84..e5907088dff1 100644 --- a/go/ql/lib/ext/github.com.revel.revel.model.yml +++ b/go/ql/lib/ext/github.com.revel.revel.model.yml @@ -1,25 +1,48 @@ extensions: + - addsTo: + pack: codeql/go-all + extensible: packageGrouping + data: + - ["revel", "github.com/revel/revel"] + - ["revel", "github.com/robfig/revel"] + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["group:revel", "Controller", True, "Params", "", "", "", "remote", "manual"] + - ["group:revel", "Request", True, "Header", "", "", "", "remote", "manual"] + - ["group:revel", "Request", True, "ContentType", "", "", "", "remote", "manual"] + - ["group:revel", "Request", True, "AcceptLanguages", "", "", "", "remote", "manual"] + - ["group:revel", "Request", True, "Locale", "", "", "", "remote", "manual"] + - ["group:revel", "Request", True, "URL", "", "", "", "remote", "manual"] + - ["group:revel", "Request", True, "Form", "", "", "", "remote", "manual"] + - ["group:revel", "Request", True, "MultipartForm", "", "", "", "remote", "manual"] + - ["group:revel", "RouteMatch", True, "Params", "", "", "", "remote", "manual"] + - ["group:revel", "Request", True, "Cookie", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:revel", "Request", True, "FormValue", "", "", "ReturnValue", "remote", "manual"] + - ["group:revel", "Request", True, "GetBody", "", "", "ReturnValue", "remote", "manual"] + - ["group:revel", "Request", True, "GetForm", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:revel", "Request", True, "GetHttpHeader", "", "", "ReturnValue", "remote", "manual"] + - ["group:revel", "Request", True, "GetMultipartForm", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:revel", "Request", True, "GetQuery", "", "", "ReturnValue", "remote", "manual"] + - ["group:revel", "Request", True, "GetRequestURI", "", "", "ReturnValue", "remote", "manual"] + - ["group:revel", "Request", True, "MultipartReader", "", "", "ReturnValue[0]", "remote", "manual"] + - ["group:revel", "Request", True, "PostFormValue", "", "", "ReturnValue", "remote", "manual"] + - ["group:revel", "Request", True, "Referer", "", "", "ReturnValue", "remote", "manual"] + - ["group:revel", "Request", True, "UserAgent", "", "", "ReturnValue", "remote", "manual"] + - ["group:revel", "ServerWebSocket", True, "MessageReceive", "", "", "Argument[0]", "remote", "manual"] + - ["group:revel", "ServerWebSocket", True, "MessageReceiveJSON", "", "", "Argument[0]", "remote", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel data: - - ["github.com/revel/revel", "Params", True, "Bind", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] - - ["github.com/revel/revel", "Params", True, "BindJSON", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] - - ["github.com/revel/revel", "RevelHeader", True, "Add", "", "", "Argument[0..1]", "Argument[receiver]", "taint", "manual"] - - ["github.com/revel/revel", "RevelHeader", True, "Get", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/revel/revel", "RevelHeader", True, "GetAll", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/revel/revel", "RevelHeader", True, "Set", "", "", "Argument[0..1]", "Argument[receiver]", "taint", "manual"] - - ["github.com/revel/revel", "RevelHeader", True, "SetCookie", "", "", "Argument[0]", "Argument[receiver]", "taint", "manual"] - - ["github.com/revel/revel", "ServerCookie", True, "GetValue", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/revel/revel", "ServerMultipartForm", True, "GetFiles", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/revel/revel", "ServerMultipartForm", True, "GetValues", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/robfig/revel", "Params", True, "Bind", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] - - ["github.com/robfig/revel", "Params", True, "BindJSON", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] - - ["github.com/robfig/revel", "RevelHeader", True, "Add", "", "", "Argument[0..1]", "Argument[receiver]", "taint", "manual"] - - ["github.com/robfig/revel", "RevelHeader", True, "Get", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/robfig/revel", "RevelHeader", True, "GetAll", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/robfig/revel", "RevelHeader", True, "Set", "", "", "Argument[0..1]", "Argument[receiver]", "taint", "manual"] - - ["github.com/robfig/revel", "RevelHeader", True, "SetCookie", "", "", "Argument[0]", "Argument[receiver]", "taint", "manual"] - - ["github.com/robfig/revel", "ServerCookie", True, "GetValue", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/robfig/revel", "ServerMultipartForm", True, "GetFiles", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/robfig/revel", "ServerMultipartForm", True, "GetValues", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:revel", "Params", True, "Bind", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] + - ["group:revel", "Params", True, "BindJSON", "", "", "Argument[receiver]", "Argument[0]", "taint", "manual"] + - ["group:revel", "RevelHeader", True, "Add", "", "", "Argument[0..1]", "Argument[receiver]", "taint", "manual"] + - ["group:revel", "RevelHeader", True, "Get", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:revel", "RevelHeader", True, "GetAll", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:revel", "RevelHeader", True, "Set", "", "", "Argument[0..1]", "Argument[receiver]", "taint", "manual"] + - ["group:revel", "RevelHeader", True, "SetCookie", "", "", "Argument[0]", "Argument[receiver]", "taint", "manual"] + - ["group:revel", "ServerCookie", True, "GetValue", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:revel", "ServerMultipartForm", True, "GetFiles", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] + - ["group:revel", "ServerMultipartForm", True, "GetValues", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.valyala.fasthttp.model.yml b/go/ql/lib/ext/github.com.valyala.fasthttp.model.yml index 033f981c0a26..8299c115d382 100644 --- a/go/ql/lib/ext/github.com.valyala.fasthttp.model.yml +++ b/go/ql/lib/ext/github.com.valyala.fasthttp.model.yml @@ -8,3 +8,58 @@ extensions: - ["github.com/valyala/fasthttp", "URI", False, "Update", "", "", "Argument[0]", "Argument[receiver]", "taint", "manual"] - ["github.com/valyala/fasthttp", "URI", False, "UpdateBytes", "", "", "Argument[0]", "Argument[receiver]", "taint", "manual"] - ["github.com/valyala/fasthttp", "URI", False, "Parse", "", "", "Argument[0..1]", "Argument[receiver]", "taint", "manual"] + + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["github.com/valyala/fasthttp", "Args", True, "Peek", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Args", True, "PeekBytes", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Args", True, "PeekMulti", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Args", True, "PeekMultiBytes", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Args", True, "QueryString", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Args", True, "String", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "URI", True, "FullURI", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "URI", True, "LastPathSegment", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "URI", True, "Path", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "URI", True, "PathOriginal", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "URI", True, "QueryString", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "URI", True, "String", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "Body", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "BodyGunzip", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "BodyInflate", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "BodyStream", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "BodyUnbrotli", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "BodyUncompressed", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "ContinueReadBody", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "ContinueReadBodyStream", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "Host", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "ReadBody", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "ReadLimitBody", "", "", "Argument[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "Request", True, "RequestURI", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestCtx", True, "Host", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestCtx", True, "Path", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestCtx", True, "PostBody", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestCtx", True, "Referer", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestCtx", True, "RequestBodyStream", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestCtx", True, "RequestURI", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestCtx", True, "String", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestCtx", True, "UserAgent", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "ContentEncoding", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "ContentType", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "Cookie", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "CookieBytes", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "Header", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "Host", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "MultipartFormBoundary", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "Peek", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "PeekAll", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "PeekBytes", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "PeekKeys", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "PeekTrailerKeys", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "RawHeaders", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "Referer", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "RequestURI", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "String", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "TrailerHeader", "", "", "ReturnValue[0]", "remote", "manual"] + - ["github.com/valyala/fasthttp", "RequestHeader", True, "UserAgent", "", "", "ReturnValue[0]", "remote", "manual"] diff --git a/go/ql/lib/ext/golang.org.x.net.websocket.model.yml b/go/ql/lib/ext/golang.org.x.net.websocket.model.yml new file mode 100644 index 000000000000..422d74248a59 --- /dev/null +++ b/go/ql/lib/ext/golang.org.x.net.websocket.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["golang.org/x/net/websocket", "Codec", True, "Receive", "", "", "Argument[1]", "remote", "manual"] + - ["golang.org/x/net/websocket", "Conn", True, "Read", "", "", "Argument[0]", "remote", "manual"] diff --git a/go/ql/lib/ext/google.golang.org.protobuf.proto.model.yml b/go/ql/lib/ext/google.golang.org.protobuf.proto.model.yml index befb1cb8b956..988559372565 100644 --- a/go/ql/lib/ext/google.golang.org.protobuf.proto.model.yml +++ b/go/ql/lib/ext/google.golang.org.protobuf.proto.model.yml @@ -3,10 +3,6 @@ extensions: pack: codeql/go-all extensible: summaryModel data: - - ["github.com/golang/protobuf/proto", "", False, "Clone", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/golang/protobuf/proto", "", False, "Marshal", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["github.com/golang/protobuf/proto", "", False, "Merge", "", "", "Argument[1]", "Argument[0]", "taint", "manual"] - - ["github.com/golang/protobuf/proto", "", False, "Unmarshal", "", "", "Argument[0]", "Argument[1]", "taint", "manual"] - ["google.golang.org/protobuf/proto", "", False, "Clone", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["google.golang.org/protobuf/proto", "", False, "Marshal", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - ["google.golang.org/protobuf/proto", "", False, "Merge", "", "", "Argument[1]", "Argument[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/gopkg.in.couchbase.gocb.model.yml b/go/ql/lib/ext/gopkg.in.couchbase.gocb.model.yml deleted file mode 100644 index 8e0613bced68..000000000000 --- a/go/ql/lib/ext/gopkg.in.couchbase.gocb.model.yml +++ /dev/null @@ -1,59 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: summaryModel - data: - - ["gopkg.in/couchbase/gocb", "", False, "NewAnalyticsQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "", False, "NewN1qlQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "AnalyticsQuery", True, "ContextId", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "AnalyticsQuery", True, "Deferred", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "AnalyticsQuery", True, "Pretty", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "AnalyticsQuery", True, "Priority", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "AnalyticsQuery", True, "RawParam", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "AnalyticsQuery", True, "ServerSideTimeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "AdHoc", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "Consistency", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "ConsistentWith", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "Custom", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "PipelineBatch", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "PipelineCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "Profile", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "ReadOnly", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "ScanCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["gopkg.in/couchbase/gocb", "N1qlQuery", True, "Timeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "", False, "NewAnalyticsQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "", False, "NewN1qlQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "AnalyticsQuery", True, "ContextId", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "AnalyticsQuery", True, "Deferred", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "AnalyticsQuery", True, "Pretty", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "AnalyticsQuery", True, "Priority", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "AnalyticsQuery", True, "RawParam", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "AnalyticsQuery", True, "ServerSideTimeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "AdHoc", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "Consistency", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "ConsistentWith", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "Custom", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "PipelineBatch", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "PipelineCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "Profile", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "ReadOnly", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "ScanCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbase/gocb", "N1qlQuery", True, "Timeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "", False, "NewAnalyticsQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "", False, "NewN1qlQuery", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "AnalyticsQuery", True, "ContextId", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "AnalyticsQuery", True, "Deferred", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "AnalyticsQuery", True, "Pretty", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "AnalyticsQuery", True, "Priority", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "AnalyticsQuery", True, "RawParam", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "AnalyticsQuery", True, "ServerSideTimeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "AdHoc", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "Consistency", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "ConsistentWith", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "Custom", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "PipelineBatch", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "PipelineCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "Profile", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "ReadOnly", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "ScanCap", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] - - ["github.com/couchbaselabs/gocb", "N1qlQuery", True, "Timeout", "", "", "Argument[receiver]", "ReturnValue", "taint", "manual"] diff --git a/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml b/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml deleted file mode 100644 index 0e04f3ba556a..000000000000 --- a/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml +++ /dev/null @@ -1,14 +0,0 @@ -extensions: - - addsTo: - pack: codeql/go-all - extensible: sinkModel - data: - - ["gopkg.in/square/go-jose.v2/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[receiver]", "jwt", "manual"] - - addsTo: - pack: codeql/go-all - extensible: summaryModel - data: - - ["gopkg.in/square/go-jose.v2/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["gopkg.in/square/go-jose.v2/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["gopkg.in/square/go-jose.v2/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] - - ["gopkg.in/square/go-jose.v2/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[receiver]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/net.http.model.yml b/go/ql/lib/ext/net.http.model.yml index 3661215f1610..ce543583700c 100644 --- a/go/ql/lib/ext/net.http.model.yml +++ b/go/ql/lib/ext/net.http.model.yml @@ -37,3 +37,11 @@ extensions: - ["net/http", "Request", True, "PostFormValue", "", "", "ReturnValue", "remote", "manual"] - ["net/http", "Request", True, "Referer", "", "", "ReturnValue", "remote", "manual"] - ["net/http", "Request", True, "UserAgent", "", "", "ReturnValue", "remote", "manual"] + - ["net/http", "Request", True, "Body", "", "", "", "remote", "manual"] + - ["net/http", "Request", True, "GetBody", "", "", "", "remote", "manual"] + - ["net/http", "Request", True, "Form", "", "", "", "remote", "manual"] + - ["net/http", "Request", True, "PostForm", "", "", "", "remote", "manual"] + - ["net/http", "Request", True, "MultipartForm", "", "", "", "remote", "manual"] + - ["net/http", "Request", True, "Header", "", "", "", "remote", "manual"] + - ["net/http", "Request", True, "Trailer", "", "", "", "remote", "manual"] + - ["net/http", "Request", True, "URL", "", "", "", "remote", "manual"] diff --git a/go/ql/lib/ext/nhooyr.io.websocket.model.yml b/go/ql/lib/ext/nhooyr.io.websocket.model.yml new file mode 100644 index 000000000000..bb94c1ce2d4c --- /dev/null +++ b/go/ql/lib/ext/nhooyr.io.websocket.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["nhooyr.io/websocket", "Conn", True, "Read", "", "", "ReturnValue[1]", "remote", "manual"] + - ["nhooyr.io/websocket", "Conn", True, "Reader", "", "", "ReturnValue[1]", "remote", "manual"] diff --git a/go/ql/lib/go.qll b/go/ql/lib/go.qll index 9260c988eaa8..81fbb9c3264b 100644 --- a/go/ql/lib/go.qll +++ b/go/ql/lib/go.qll @@ -34,7 +34,6 @@ import semmle.go.frameworks.Afero import semmle.go.frameworks.AwsLambda import semmle.go.frameworks.Beego import semmle.go.frameworks.BeegoOrm -import semmle.go.frameworks.Chi import semmle.go.frameworks.Couchbase import semmle.go.frameworks.Echo import semmle.go.frameworks.ElazarlGoproxy @@ -49,7 +48,6 @@ import semmle.go.frameworks.Gogf import semmle.go.frameworks.GoJose import semmle.go.frameworks.GoKit import semmle.go.frameworks.GoMicro -import semmle.go.frameworks.GoRestfulHttp import semmle.go.frameworks.Gqlgen import semmle.go.frameworks.Iris import semmle.go.frameworks.Jwt diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 82ae1ba79f67..7e0622a6f07c 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 1.1.2 +version: 1.1.3 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll index 583f96661a49..94b5dd708b2c 100644 --- a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -20,7 +20,10 @@ * 1. The `package` column selects a package. Note that if the package does not * contain a major version suffix (like "/v2") then we will match all major * versions. This can be disabled by putting `fixed-version:` at the start - * of the package path. + * of the package path. Also, instead of a package path, if this column is + * "group:" then it indicates that the row applies to all + * packages in the group `` according to the `packageGrouping` + * predicate. * 2. The `type` column selects a type within that package. * 3. The `subtypes` is a boolean that indicates whether to jump to an * arbitrary subtype of that type. @@ -78,7 +81,7 @@ */ private import go -import internal.ExternalFlowExtensions +import internal.ExternalFlowExtensions as FlowExtensions private import FlowSummary as FlowSummary private import internal.DataFlowPrivate private import internal.FlowSummaryImpl @@ -87,6 +90,89 @@ private import internal.FlowSummaryImpl::Private private import internal.FlowSummaryImpl::Private::External private import codeql.mad.ModelValidation as SharedModelVal +/** Gets the prefix for a group of packages. */ +private string groupPrefix() { result = "group:" } + +/** + * Gets a package represented by `packageOrGroup`. + * + * If `packageOrGroup` is of the form `group:` then `result` is a + * package in the group ``, as determined by `packageGrouping`. + * Otherwise, `result` is `packageOrGroup`. + */ +bindingset[packageOrGroup] +private string getPackage(string packageOrGroup) { + not exists(string group | packageOrGroup = groupPrefix() + group) and result = packageOrGroup + or + exists(string group | + FlowExtensions::packageGrouping(group, result) and + packageOrGroup = groupPrefix() + group + ) +} + +/** + * Holds if a source model exists for the given parameters. + * + * Note that `group:` references are expanded into one or more actual packages + * by this predicate. + */ +predicate sourceModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind, string provenance, QlBuiltins::ExtensionId madId +) { + exists(string packageOrGroup | + package = getPackage(packageOrGroup) and + FlowExtensions::sourceModel(packageOrGroup, type, subtypes, name, signature, ext, output, kind, + provenance, madId) + ) +} + +/** + * Holds if a sink model exists for the given parameters. + * + * Note that `group:` references are expanded into one or more actual packages + * by this predicate. + */ +predicate sinkModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input, string kind, string provenance, QlBuiltins::ExtensionId madId +) { + exists(string packageOrGroup | package = getPackage(packageOrGroup) | + FlowExtensions::sinkModel(packageOrGroup, type, subtypes, name, signature, ext, input, kind, + provenance, madId) + ) +} + +/** + * Holds if a summary model exists for the given parameters. + * + * Note that `group:` references are expanded into one or more actual packages + * by this predicate. + */ +predicate summaryModel( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input, string output, string kind, string provenance, QlBuiltins::ExtensionId madId +) { + exists(string packageOrGroup | package = getPackage(packageOrGroup) | + FlowExtensions::summaryModel(packageOrGroup, type, subtypes, name, signature, ext, input, + output, kind, provenance, madId) + ) +} + +/** + * Holds if a neutral model exists for the given parameters. + * + * Note that `group:` references are expanded into one or more actual packages + * by this predicate. + */ +predicate neutralModel( + string package, string type, string name, string signature, string kind, string provenance +) { + exists(string packageOrGroup | package = getPackage(packageOrGroup) | + FlowExtensions::neutralModel(packageOrGroup, type, name, signature, kind, provenance) + ) +} + /** * Holds if the given extension tuple `madId` should pretty-print as `model`. * @@ -286,12 +372,30 @@ module ModelValidation { ) } + private string getInvalidPackageGroup() { + exists(string pred, string group, string package | + FlowExtensions::sourceModel(package, _, _, _, _, _, _, _, _, _) and pred = "source" + or + FlowExtensions::sinkModel(package, _, _, _, _, _, _, _, _, _) and pred = "sink" + or + FlowExtensions::summaryModel(package, _, _, _, _, _, _, _, _, _, _) and + pred = "summary" + or + FlowExtensions::neutralModel(package, _, _, _, _, _) and + pred = "neutral" + | + package = groupPrefix() + group and + not FlowExtensions::packageGrouping(group, _) and + result = "Dubious package group \"" + package + "\" in " + pred + " model." + ) + } + /** Holds if some row in a MaD flow model appears to contain typos. */ query predicate invalidModelRow(string msg) { msg = [ getInvalidModelSignature(), getInvalidModelInput(), getInvalidModelOutput(), - KindVal::getInvalidModelKind() + KindVal::getInvalidModelKind(), getInvalidPackageGroup() ] } } diff --git a/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll b/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll index 1cc3fe7292ea..b1e1c906028c 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll @@ -32,3 +32,8 @@ extensible predicate summaryModel( extensible predicate neutralModel( string package, string type, string name, string signature, string kind, string provenance ); + +/** + * Holds if the package `package` is part of the group `group`. + */ +extensible predicate packageGrouping(string group, string package); diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll index 9cd16308191d..1b521d89d98d 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll @@ -423,7 +423,7 @@ private class ClearSanitizer extends DefaultTaintSanitizer { arg = call.getAnArgument() and arg = var.getAUse() and arg != this and - this.getBasicBlock().(ReachableBasicBlock).dominates(this.getBasicBlock()) + arg.getBasicBlock().(ReachableBasicBlock).dominates(this.getBasicBlock()) ) } } diff --git a/go/ql/lib/semmle/go/frameworks/Chi.qll b/go/ql/lib/semmle/go/frameworks/Chi.qll deleted file mode 100644 index 7185b7713ffd..000000000000 --- a/go/ql/lib/semmle/go/frameworks/Chi.qll +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Provides classes for working with remote flow sources from the `github.com/go-chi/chi` package. - */ - -import go - -private module Chi { - /** Gets the package name `github.com/go-chi/chi`. */ - string packagePath() { result = package("github.com/go-chi/chi", "") } - - /** - * Functions that extract URL parameters, considered as a source of remote flow. - */ - private class UserControlledFunction extends RemoteFlowSource::Range, DataFlow::CallNode { - UserControlledFunction() { - this.getTarget().hasQualifiedName(packagePath(), ["URLParam", "URLParamFromCtx"]) - } - } - - /** - * Methods that extract URL parameters, considered as a source of remote flow. - */ - private class UserControlledRequestMethod extends RemoteFlowSource::Range, - DataFlow::MethodCallNode - { - UserControlledRequestMethod() { - this.getTarget().hasQualifiedName(packagePath(), "Context", "URLParam") - } - } -} diff --git a/go/ql/lib/semmle/go/frameworks/Echo.qll b/go/ql/lib/semmle/go/frameworks/Echo.qll index b27893824c12..440d2effd5c5 100644 --- a/go/ql/lib/semmle/go/frameworks/Echo.qll +++ b/go/ql/lib/semmle/go/frameworks/Echo.qll @@ -9,23 +9,6 @@ private module Echo { /** Gets the package name `github.com/labstack/echo`. */ private string packagePath() { result = package("github.com/labstack/echo", "") } - /** - * Data from a `Context` interface method, considered as a source of remote flow. - */ - private class EchoContextSource extends RemoteFlowSource::Range { - EchoContextSource() { - exists(DataFlow::MethodCallNode call, string methodName | - methodName = - [ - "Param", "ParamValues", "QueryParam", "QueryParams", "QueryString", "FormValue", - "FormParams", "FormFile", "MultipartForm", "Cookie", "Cookies" - ] and - call.getTarget().hasQualifiedName(packagePath(), "Context", methodName) and - this = call.getResult(0) - ) - } - } - /** * Data from a `Context` interface method that is not generally exploitable for open-redirect attacks. */ @@ -39,19 +22,6 @@ private module Echo { } } - /** - * A call to a method on `Context` struct that unmarshals data into a target. - */ - private class EchoContextBinder extends RemoteFlowSource::Range { - EchoContextBinder() { - exists(DataFlow::MethodCallNode call | - call.getTarget().hasQualifiedName(packagePath(), "Context", "Bind") - | - this = FunctionOutput::parameter(0).getExitNode(call) - ) - } - } - /** * `echo.Context` methods which set the content-type to `text/html` and write a result in one operation. */ diff --git a/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll b/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll index 007ea56a81c8..4d10c8af312d 100644 --- a/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll +++ b/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll @@ -95,19 +95,6 @@ module ElazarlGoproxy { } } - private class UserControlledRequestData extends RemoteFlowSource::Range { - UserControlledRequestData() { - exists(DataFlow::FieldReadNode frn | this = frn | - // liberally consider ProxyCtx.UserData to be untrusted; it's a data field set by a request handler - frn.getField().hasQualifiedName(packagePath(), "ProxyCtx", "UserData") - ) - or - exists(DataFlow::MethodCallNode call | this = call | - call.getTarget().hasQualifiedName(packagePath(), "ProxyCtx", "Charset") - ) - } - } - private class ProxyLogFunction extends StringOps::Formatting::Range, Method { ProxyLogFunction() { this.hasQualifiedName(packagePath(), "ProxyCtx", ["Logf", "Warnf"]) } diff --git a/go/ql/lib/semmle/go/frameworks/Fasthttp.qll b/go/ql/lib/semmle/go/frameworks/Fasthttp.qll index 86a1bfbdf0c0..adc55547bb78 100644 --- a/go/ql/lib/semmle/go/frameworks/Fasthttp.qll +++ b/go/ql/lib/semmle/go/frameworks/Fasthttp.qll @@ -252,18 +252,22 @@ module Fasthttp { } /** + * DEPRECATED + * * Provide modeling for fasthttp.URI Type. */ - module URI { + deprecated module URI { /** - * DEPRECATED: Use `RemoteFlowSource` instead. + * DEPRECATED: Use `RemoteFlowSource::Range` instead. */ deprecated class UntrustedFlowSource = RemoteFlowSource; /** + * DEPRECATED: Use `RemoteFlowSource::Range` instead. + * * The methods as Remote user controllable source which are part of the incoming URL. */ - class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { + deprecated class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { RemoteFlowSource() { exists(Method m | m.hasQualifiedName(packagePath(), "URI", @@ -275,20 +279,24 @@ module Fasthttp { } /** + * DEPRECATED + * * Provide modeling for fasthttp.Args Type. */ - module Args { + deprecated module Args { /** - * DEPRECATED: Use `RemoteFlowSource` instead. + * DEPRECATED: Use `RemoteFlowSource::Range` instead. */ deprecated class UntrustedFlowSource = RemoteFlowSource; /** + * DEPRECATED: Use `RemoteFlowSource::Range` instead. + * * The methods as Remote user controllable source which are part of the incoming URL Parameters. * * When support for lambdas has been implemented we should model "VisitAll". */ - class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { + deprecated class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { RemoteFlowSource() { exists(Method m | m.hasQualifiedName(packagePath(), "Args", @@ -397,14 +405,16 @@ module Fasthttp { */ module Request { /** - * DEPRECATED: Use `RemoteFlowSource` instead. + * DEPRECATED: Use `RemoteFlowSource::range` instead. */ deprecated class UntrustedFlowSource = RemoteFlowSource; /** + * DEPRECATED: Use `RemoteFlowSource::range` instead. + * * The methods as Remote user controllable source which can be many part of request. */ - class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { + deprecated class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { RemoteFlowSource() { exists(Method m | m.hasQualifiedName(packagePath(), "Request", @@ -484,11 +494,13 @@ module Fasthttp { deprecated class UntrustedFlowSource = RemoteFlowSource; /** + * DEPRECATED: Use `RemoteFlowSource` instead. + * * The methods as Remote user controllable source which are generally related to HTTP request. * * When support for lambdas has been implemented we should model "VisitAll", "VisitAllCookie", "VisitAllInOrder", "VisitAllTrailer". */ - class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { + deprecated class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { RemoteFlowSource() { exists(Method m | m.hasQualifiedName(packagePath(), "RequestCtx", @@ -503,20 +515,24 @@ module Fasthttp { } /** + * DEPRECATED + * * Provide Methods of fasthttp.RequestHeader which mostly used as remote user controlled sources. */ - module RequestHeader { + deprecated module RequestHeader { /** - * DEPRECATED: Use `RemoteFlowSource` instead. + * DEPRECATED: Use `RemoteFlowSource::Range` instead. */ deprecated class UntrustedFlowSource = RemoteFlowSource; /** + * DEPRECATED: Use `RemoteFlowSource::Range` instead. + * * The methods as Remote user controllable source which are mostly related to HTTP Request Headers. * * When support for lambdas has been implemented we should model "VisitAll", "VisitAllCookie", "VisitAllInOrder", "VisitAllTrailer". */ - class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { + deprecated class RemoteFlowSource extends RemoteFlowSource::Range instanceof DataFlow::Node { RemoteFlowSource() { exists(Method m | m.hasQualifiedName(packagePath(), "RequestHeader", diff --git a/go/ql/lib/semmle/go/frameworks/Gin.qll b/go/ql/lib/semmle/go/frameworks/Gin.qll index 986429ead1bf..7773c8f9a134 100644 --- a/go/ql/lib/semmle/go/frameworks/Gin.qll +++ b/go/ql/lib/semmle/go/frameworks/Gin.qll @@ -9,52 +9,6 @@ private module Gin { /** Gets the package name `github.com/gin-gonic/gin`. */ string packagePath() { result = package("github.com/gin-gonic/gin", "") } - /** - * Data from a `Context` struct, considered as a source of remote flow. - */ - private class GithubComGinGonicGinContextSource extends RemoteFlowSource::Range { - GithubComGinGonicGinContextSource() { - // Method calls: - exists(DataFlow::MethodCallNode call, string methodName | - call.getTarget().hasQualifiedName(packagePath(), "Context", methodName) and - methodName in [ - "FullPath", "GetHeader", "QueryArray", "Query", "PostFormArray", "PostForm", "Param", - "GetStringSlice", "GetString", "GetRawData", "ClientIP", "ContentType", "Cookie", - "GetQueryArray", "GetQuery", "GetPostFormArray", "GetPostForm", "DefaultPostForm", - "DefaultQuery", "GetPostFormMap", "GetQueryMap", "GetStringMap", "GetStringMapString", - "GetStringMapStringSlice", "PostFormMap", "QueryMap" - ] - | - this = call.getResult(0) - ) - or - // Field reads: - exists(DataFlow::Field fld | - fld.hasQualifiedName(packagePath(), "Context", ["Accepted", "Params"]) and - this = fld.getARead() - ) - } - } - - /** - * A call to a method on `Context` struct that unmarshals data into a target. - */ - private class GithubComGinGonicGinContextBindSource extends RemoteFlowSource::Range { - GithubComGinGonicGinContextBindSource() { - exists(DataFlow::MethodCallNode call, string methodName | - call.getTarget().hasQualifiedName(packagePath(), "Context", methodName) and - methodName in [ - "BindJSON", "BindYAML", "BindXML", "BindUri", "BindQuery", "BindWith", "BindHeader", - "MustBindWith", "Bind", "ShouldBind", "ShouldBindBodyWith", "ShouldBindJSON", - "ShouldBindQuery", "ShouldBindUri", "ShouldBindHeader", "ShouldBindWith", - "ShouldBindXML", "ShouldBindYAML" - ] - | - this = FunctionOutput::parameter(0).getExitNode(call) - ) - } - } - /** * The File system access sinks */ diff --git a/go/ql/lib/semmle/go/frameworks/GoRestfulHttp.qll b/go/ql/lib/semmle/go/frameworks/GoRestfulHttp.qll deleted file mode 100644 index cf49d64b4311..000000000000 --- a/go/ql/lib/semmle/go/frameworks/GoRestfulHttp.qll +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Provides models of the [go-restful library](https://github.com/emicklei/go-restful). - */ - -import go - -/** - * Provides models of the [go-restful library](https://github.com/emicklei/go-restful). - */ -private module GoRestfulHttp { - /** Gets the package name `github.com/emicklei/go-restful`. */ - string packagePath() { result = package("github.com/emicklei/go-restful", "") } - - /** - * A model for methods defined on go-restful's `Request` object that may return user-controlled data. - */ - private class GoRestfulSourceMethod extends Method { - GoRestfulSourceMethod() { - this.hasQualifiedName(packagePath(), "Request", - [ - "QueryParameters", "QueryParameter", "BodyParameter", "HeaderParameter", "PathParameter", - "PathParameters" - ]) - } - } - - /** - * A model of go-restful's `Request` object as a source of user-controlled data. - */ - private class GoRestfulSource extends RemoteFlowSource::Range { - GoRestfulSource() { this = any(GoRestfulSourceMethod g).getACall() } - } - - /** - * A model of go-restful's `Request.ReadEntity` method as a source of user-controlled data. - */ - private class GoRestfulReadEntitySource extends RemoteFlowSource::Range { - GoRestfulReadEntitySource() { - exists(DataFlow::MethodCallNode call | - call.getTarget().hasQualifiedName(packagePath(), "Request", "ReadEntity") - | - this = FunctionOutput::parameter(0).getExitNode(call) - ) - } - } -} diff --git a/go/ql/lib/semmle/go/frameworks/Mux.qll b/go/ql/lib/semmle/go/frameworks/Mux.qll index 7931ecee700e..e9bb5968f702 100644 --- a/go/ql/lib/semmle/go/frameworks/Mux.qll +++ b/go/ql/lib/semmle/go/frameworks/Mux.qll @@ -5,11 +5,17 @@ import go /** + * DEPRECATED + * * Provides classes for working with concepts in the Mux HTTP middleware library. */ -module Mux { - /** An access to a Mux middleware variable. */ - class RequestVars extends DataFlow::RemoteFlowSource::Range, DataFlow::CallNode { +deprecated module Mux { + /** + * DEPRECATED: Use `RemoteFlowSource::Range` instead. + * + * An access to a Mux middleware variable. + */ + deprecated class RequestVars extends DataFlow::RemoteFlowSource::Range, DataFlow::CallNode { RequestVars() { this.getTarget().hasQualifiedName(package("github.com/gorilla/mux", ""), "Vars") } diff --git a/go/ql/lib/semmle/go/frameworks/Revel.qll b/go/ql/lib/semmle/go/frameworks/Revel.qll index d0381f5d11fa..43ac4d92a265 100644 --- a/go/ql/lib/semmle/go/frameworks/Revel.qll +++ b/go/ql/lib/semmle/go/frameworks/Revel.qll @@ -12,15 +12,6 @@ module Revel { result = package(["github.com/revel", "github.com/robfig"] + "/revel", "") } - private class ControllerParams extends RemoteFlowSource::Range, DataFlow::FieldReadNode { - ControllerParams() { - exists(Field f | - this.readsField(_, f) and - f.hasQualifiedName(packagePath(), "Controller", "Params") - ) - } - } - private class ParamsFixedSanitizer extends TaintTracking::DefaultTaintSanitizer, DataFlow::FieldReadNode { @@ -32,41 +23,6 @@ module Revel { } } - private class RouteMatchParams extends RemoteFlowSource::Range, DataFlow::FieldReadNode { - RouteMatchParams() { - exists(Field f | - this.readsField(_, f) and - f.hasQualifiedName(packagePath(), "RouteMatch", "Params") - ) - } - } - - /** An access to an HTTP request field whose value may be controlled by an untrusted user. */ - private class UserControlledRequestField extends RemoteFlowSource::Range, DataFlow::FieldReadNode { - UserControlledRequestField() { - exists(string fieldName | - this.getField().hasQualifiedName(packagePath(), "Request", fieldName) - | - fieldName in [ - "Header", "ContentType", "AcceptLanguages", "Locale", "URL", "Form", "MultipartForm" - ] - ) - } - } - - private class UserControlledRequestMethod extends RemoteFlowSource::Range, - DataFlow::MethodCallNode - { - UserControlledRequestMethod() { - this.getTarget() - .hasQualifiedName(packagePath(), "Request", - [ - "FormValue", "PostFormValue", "GetQuery", "GetForm", "GetMultipartForm", "GetBody", - "Cookie", "GetHttpHeader", "GetRequestURI", "MultipartReader", "Referer", "UserAgent" - ]) - } - } - private string contentTypeFromFilename(DataFlow::Node filename) { if filename.getStringValue().regexpMatch("(?i).*\\.html?") then result = "text/html" diff --git a/go/ql/lib/semmle/go/frameworks/WebSocket.qll b/go/ql/lib/semmle/go/frameworks/WebSocket.qll index 8d201a1f1a1f..eb6160214cce 100644 --- a/go/ql/lib/semmle/go/frameworks/WebSocket.qll +++ b/go/ql/lib/semmle/go/frameworks/WebSocket.qll @@ -125,9 +125,11 @@ module WebSocketRequestCall { } /** + * DEPRECATED: Use `WebSocketReader` or `RemoteFlowSource::Range` instead. + * * A message written to a WebSocket, considered as a flow sink for reflected XSS. */ -class WebSocketReaderAsSource extends RemoteFlowSource::Range { +deprecated class WebSocketReaderAsSource extends RemoteFlowSource::Range { WebSocketReaderAsSource() { exists(WebSocketReader r | this = r.getAnOutput().getNode(r.getACall())) } diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll b/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll index 4da2f6fe0ca7..8d307fc67ff4 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll @@ -8,16 +8,6 @@ private import semmle.go.dataflow.internal.FlowSummaryImpl::Private /** Provides models of commonly used functions in the `net/http` package. */ module NetHttp { - /** An access to an HTTP request field whose value may be controlled by an untrusted user. */ - private class UserControlledRequestField extends RemoteFlowSource::Range, DataFlow::FieldReadNode { - UserControlledRequestField() { - exists(string fieldName | this.getField().hasQualifiedName("net/http", "Request", fieldName) | - fieldName = - ["Body", "GetBody", "Form", "PostForm", "MultipartForm", "Header", "Trailer", "URL"] - ) - } - } - /** The declaration of a variable which either is or has a field that implements the http.ResponseWriter type */ private class StdlibResponseWriter extends Http::ResponseWriter::Range { SsaWithFields v; diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index f02101176a92..7248057e4089 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.0.4.md b/go/ql/src/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/go/ql/src/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index e8de1b21f509..8438e3c589c7 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.0.3 +version: 1.0.4 groups: - go - queries diff --git a/go/ql/test/experimental/CWE-090/LDAPInjection.expected b/go/ql/test/experimental/CWE-090/LDAPInjection.expected index 1b21ad41b8e0..514d04162892 100644 --- a/go/ql/test/experimental/CWE-090/LDAPInjection.expected +++ b/go/ql/test/experimental/CWE-090/LDAPInjection.expected @@ -1,18 +1,18 @@ edges -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:59:3:59:11 | untrusted | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:61:3:61:51 | ...+... | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:3:62:33 | slice literal | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:24:62:32 | untrusted | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:66:3:66:11 | untrusted | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:68:3:68:51 | ...+... | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:3:69:33 | slice literal | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:24:69:32 | untrusted | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:73:3:73:11 | untrusted | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:75:3:75:51 | ...+... | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:3:76:33 | slice literal | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:24:76:32 | untrusted | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:80:22:80:30 | untrusted | provenance | Src:MaD:747 | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:81:25:81:33 | untrusted | provenance | Src:MaD:747 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:59:3:59:11 | untrusted | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:61:3:61:51 | ...+... | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:3:62:33 | slice literal | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:24:62:32 | untrusted | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:66:3:66:11 | untrusted | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:68:3:68:51 | ...+... | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:3:69:33 | slice literal | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:24:69:32 | untrusted | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:73:3:73:11 | untrusted | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:75:3:75:51 | ...+... | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:3:76:33 | slice literal | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:24:76:32 | untrusted | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:80:22:80:30 | untrusted | provenance | Src:MaD:794 | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:81:25:81:33 | untrusted | provenance | Src:MaD:794 | | LDAPInjection.go:62:3:62:33 | slice literal [array] | LDAPInjection.go:62:3:62:33 | slice literal | provenance | | | LDAPInjection.go:62:24:62:32 | untrusted | LDAPInjection.go:62:3:62:33 | slice literal [array] | provenance | | | LDAPInjection.go:69:3:69:33 | slice literal [array] | LDAPInjection.go:69:3:69:33 | slice literal | provenance | | diff --git a/go/ql/test/experimental/CWE-203/Timing.expected b/go/ql/test/experimental/CWE-203/Timing.expected index 9abfb3d575b4..11ccfa802c34 100644 --- a/go/ql/test/experimental/CWE-203/Timing.expected +++ b/go/ql/test/experimental/CWE-203/Timing.expected @@ -1,9 +1,9 @@ edges -| timing.go:15:18:15:27 | selection of Header | timing.go:15:18:15:45 | call to Get | provenance | MaD:728 | +| timing.go:15:18:15:27 | selection of Header | timing.go:15:18:15:45 | call to Get | provenance | Src:MaD:800 MaD:775 | | timing.go:15:18:15:45 | call to Get | timing.go:17:31:17:42 | headerSecret | provenance | | -| timing.go:28:18:28:27 | selection of Header | timing.go:28:18:28:45 | call to Get | provenance | MaD:728 | +| timing.go:28:18:28:27 | selection of Header | timing.go:28:18:28:45 | call to Get | provenance | Src:MaD:800 MaD:775 | | timing.go:28:18:28:45 | call to Get | timing.go:30:47:30:58 | headerSecret | provenance | | -| timing.go:41:18:41:27 | selection of Header | timing.go:41:18:41:45 | call to Get | provenance | MaD:728 | +| timing.go:41:18:41:27 | selection of Header | timing.go:41:18:41:45 | call to Get | provenance | Src:MaD:800 MaD:775 | | timing.go:41:18:41:45 | call to Get | timing.go:42:25:42:36 | headerSecret | provenance | | nodes | timing.go:15:18:15:27 | selection of Header | semmle.label | selection of Header | diff --git a/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected b/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected index 6c21e152efc7..e1b5b23f1ddf 100644 --- a/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected +++ b/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected @@ -1,5 +1,5 @@ edges -| ImproperLdapAuth.go:18:18:18:24 | selection of URL | ImproperLdapAuth.go:18:18:18:32 | call to Query | provenance | MaD:808 | +| ImproperLdapAuth.go:18:18:18:24 | selection of URL | ImproperLdapAuth.go:18:18:18:32 | call to Query | provenance | Src:MaD:802 MaD:863 | | ImproperLdapAuth.go:18:18:18:32 | call to Query | ImproperLdapAuth.go:28:23:28:34 | bindPassword | provenance | | | ImproperLdapAuth.go:87:18:87:19 | "" | ImproperLdapAuth.go:97:23:97:34 | bindPassword | provenance | | nodes diff --git a/go/ql/test/experimental/CWE-369/DivideByZero.expected b/go/ql/test/experimental/CWE-369/DivideByZero.expected index 5303951e4dc8..f9e0a4905cb5 100644 --- a/go/ql/test/experimental/CWE-369/DivideByZero.expected +++ b/go/ql/test/experimental/CWE-369/DivideByZero.expected @@ -1,24 +1,24 @@ edges -| DivideByZero.go:10:12:10:16 | selection of URL | DivideByZero.go:10:12:10:24 | call to Query | provenance | MaD:808 | +| DivideByZero.go:10:12:10:16 | selection of URL | DivideByZero.go:10:12:10:24 | call to Query | provenance | Src:MaD:802 MaD:863 | | DivideByZero.go:10:12:10:24 | call to Query | DivideByZero.go:11:27:11:32 | param1 | provenance | | | DivideByZero.go:11:2:11:33 | ... := ...[0] | DivideByZero.go:12:16:12:20 | value | provenance | | | DivideByZero.go:11:27:11:32 | param1 | DivideByZero.go:11:2:11:33 | ... := ...[0] | provenance | Config | -| DivideByZero.go:17:12:17:16 | selection of URL | DivideByZero.go:17:12:17:24 | call to Query | provenance | MaD:808 | +| DivideByZero.go:17:12:17:16 | selection of URL | DivideByZero.go:17:12:17:24 | call to Query | provenance | Src:MaD:802 MaD:863 | | DivideByZero.go:17:12:17:24 | call to Query | DivideByZero.go:18:11:18:24 | type conversion | provenance | | | DivideByZero.go:18:11:18:24 | type conversion | DivideByZero.go:19:16:19:20 | value | provenance | | -| DivideByZero.go:24:12:24:16 | selection of URL | DivideByZero.go:24:12:24:24 | call to Query | provenance | MaD:808 | +| DivideByZero.go:24:12:24:16 | selection of URL | DivideByZero.go:24:12:24:24 | call to Query | provenance | Src:MaD:802 MaD:863 | | DivideByZero.go:24:12:24:24 | call to Query | DivideByZero.go:25:31:25:36 | param1 | provenance | | | DivideByZero.go:25:2:25:45 | ... := ...[0] | DivideByZero.go:26:16:26:20 | value | provenance | | | DivideByZero.go:25:31:25:36 | param1 | DivideByZero.go:25:2:25:45 | ... := ...[0] | provenance | Config | -| DivideByZero.go:31:12:31:16 | selection of URL | DivideByZero.go:31:12:31:24 | call to Query | provenance | MaD:808 | +| DivideByZero.go:31:12:31:16 | selection of URL | DivideByZero.go:31:12:31:24 | call to Query | provenance | Src:MaD:802 MaD:863 | | DivideByZero.go:31:12:31:24 | call to Query | DivideByZero.go:32:33:32:38 | param1 | provenance | | | DivideByZero.go:32:2:32:43 | ... := ...[0] | DivideByZero.go:33:16:33:20 | value | provenance | | | DivideByZero.go:32:33:32:38 | param1 | DivideByZero.go:32:2:32:43 | ... := ...[0] | provenance | Config | -| DivideByZero.go:38:12:38:16 | selection of URL | DivideByZero.go:38:12:38:24 | call to Query | provenance | MaD:808 | +| DivideByZero.go:38:12:38:16 | selection of URL | DivideByZero.go:38:12:38:24 | call to Query | provenance | Src:MaD:802 MaD:863 | | DivideByZero.go:38:12:38:24 | call to Query | DivideByZero.go:39:32:39:37 | param1 | provenance | | | DivideByZero.go:39:2:39:46 | ... := ...[0] | DivideByZero.go:40:16:40:20 | value | provenance | | | DivideByZero.go:39:32:39:37 | param1 | DivideByZero.go:39:2:39:46 | ... := ...[0] | provenance | Config | -| DivideByZero.go:54:12:54:16 | selection of URL | DivideByZero.go:54:12:54:24 | call to Query | provenance | MaD:808 | +| DivideByZero.go:54:12:54:16 | selection of URL | DivideByZero.go:54:12:54:24 | call to Query | provenance | Src:MaD:802 MaD:863 | | DivideByZero.go:54:12:54:24 | call to Query | DivideByZero.go:55:11:55:24 | type conversion | provenance | | | DivideByZero.go:55:11:55:24 | type conversion | DivideByZero.go:57:17:57:21 | value | provenance | | nodes diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 691a39136461..324734afd6c8 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,24 +1,24 @@ edges -| test.go:59:16:59:44 | call to FormValue | test.go:128:20:128:27 | definition of filename | provenance | Src:MaD:743 | -| test.go:60:15:60:26 | selection of Body | test.go:158:19:158:22 | definition of file | provenance | | -| test.go:61:24:61:35 | selection of Body | test.go:169:28:169:31 | definition of file | provenance | | -| test.go:62:13:62:24 | selection of Body | test.go:181:17:181:20 | definition of file | provenance | | -| test.go:64:8:64:19 | selection of Body | test.go:208:12:208:15 | definition of file | provenance | | -| test.go:66:8:66:19 | selection of Body | test.go:233:12:233:15 | definition of file | provenance | | -| test.go:68:17:68:28 | selection of Body | test.go:258:21:258:24 | definition of file | provenance | | -| test.go:70:13:70:24 | selection of Body | test.go:283:17:283:20 | definition of file | provenance | | -| test.go:72:16:72:27 | selection of Body | test.go:308:20:308:23 | definition of file | provenance | | -| test.go:74:7:74:18 | selection of Body | test.go:333:11:333:14 | definition of file | provenance | | -| test.go:76:9:76:20 | selection of Body | test.go:358:13:358:16 | definition of file | provenance | | -| test.go:78:18:78:29 | selection of Body | test.go:384:22:384:25 | definition of file | provenance | | -| test.go:80:5:80:16 | selection of Body | test.go:412:9:412:12 | definition of file | provenance | | -| test.go:82:7:82:18 | selection of Body | test.go:447:11:447:14 | definition of file | provenance | | -| test.go:84:15:84:26 | selection of Body | test.go:440:19:440:21 | definition of src | provenance | | -| test.go:85:16:85:27 | selection of Body | test.go:472:20:472:23 | definition of file | provenance | | -| test.go:87:16:87:27 | selection of Body | test.go:499:20:499:23 | definition of file | provenance | | -| test.go:89:17:89:28 | selection of Body | test.go:526:21:526:24 | definition of file | provenance | | -| test.go:91:15:91:26 | selection of Body | test.go:555:19:555:22 | definition of file | provenance | | -| test.go:93:5:93:16 | selection of Body | test.go:580:9:580:12 | definition of file | provenance | | +| test.go:59:16:59:44 | call to FormValue | test.go:128:20:128:27 | definition of filename | provenance | Src:MaD:790 | +| test.go:60:15:60:26 | selection of Body | test.go:158:19:158:22 | definition of file | provenance | Src:MaD:795 | +| test.go:61:24:61:35 | selection of Body | test.go:169:28:169:31 | definition of file | provenance | Src:MaD:795 | +| test.go:62:13:62:24 | selection of Body | test.go:181:17:181:20 | definition of file | provenance | Src:MaD:795 | +| test.go:64:8:64:19 | selection of Body | test.go:208:12:208:15 | definition of file | provenance | Src:MaD:795 | +| test.go:66:8:66:19 | selection of Body | test.go:233:12:233:15 | definition of file | provenance | Src:MaD:795 | +| test.go:68:17:68:28 | selection of Body | test.go:258:21:258:24 | definition of file | provenance | Src:MaD:795 | +| test.go:70:13:70:24 | selection of Body | test.go:283:17:283:20 | definition of file | provenance | Src:MaD:795 | +| test.go:72:16:72:27 | selection of Body | test.go:308:20:308:23 | definition of file | provenance | Src:MaD:795 | +| test.go:74:7:74:18 | selection of Body | test.go:333:11:333:14 | definition of file | provenance | Src:MaD:795 | +| test.go:76:9:76:20 | selection of Body | test.go:358:13:358:16 | definition of file | provenance | Src:MaD:795 | +| test.go:78:18:78:29 | selection of Body | test.go:384:22:384:25 | definition of file | provenance | Src:MaD:795 | +| test.go:80:5:80:16 | selection of Body | test.go:412:9:412:12 | definition of file | provenance | Src:MaD:795 | +| test.go:82:7:82:18 | selection of Body | test.go:447:11:447:14 | definition of file | provenance | Src:MaD:795 | +| test.go:84:15:84:26 | selection of Body | test.go:440:19:440:21 | definition of src | provenance | Src:MaD:795 | +| test.go:85:16:85:27 | selection of Body | test.go:472:20:472:23 | definition of file | provenance | Src:MaD:795 | +| test.go:87:16:87:27 | selection of Body | test.go:499:20:499:23 | definition of file | provenance | Src:MaD:795 | +| test.go:89:17:89:28 | selection of Body | test.go:526:21:526:24 | definition of file | provenance | Src:MaD:795 | +| test.go:91:15:91:26 | selection of Body | test.go:555:19:555:22 | definition of file | provenance | Src:MaD:795 | +| test.go:93:5:93:16 | selection of Body | test.go:580:9:580:12 | definition of file | provenance | Src:MaD:795 | | test.go:128:20:128:27 | definition of filename | test.go:130:33:130:40 | filename | provenance | | | test.go:128:20:128:27 | definition of filename | test.go:143:51:143:58 | filename | provenance | | | test.go:130:2:130:41 | ... := ...[0] | test.go:132:12:132:12 | f | provenance | | @@ -31,7 +31,7 @@ edges | test.go:145:12:145:19 | call to Open | test.go:147:37:147:38 | rc | provenance | | | test.go:158:19:158:22 | definition of file | test.go:159:25:159:28 | file | provenance | | | test.go:159:2:159:29 | ... := ...[0] | test.go:160:48:160:52 | file1 | provenance | | -| test.go:159:25:159:28 | file | test.go:159:2:159:29 | ... := ...[0] | provenance | MaD:620 | +| test.go:159:25:159:28 | file | test.go:159:2:159:29 | ... := ...[0] | provenance | MaD:667 | | test.go:160:2:160:69 | ... := ...[0] | test.go:163:26:163:29 | file | provenance | | | test.go:160:32:160:53 | call to NewReader | test.go:160:2:160:69 | ... := ...[0] | provenance | Config | | test.go:160:48:160:52 | file1 | test.go:160:32:160:53 | call to NewReader | provenance | MaD:46 | @@ -39,7 +39,7 @@ edges | test.go:163:26:163:29 | file | test.go:163:3:163:36 | ... := ...[0] | provenance | MaD:8 | | test.go:169:28:169:31 | definition of file | test.go:170:25:170:28 | file | provenance | | | test.go:170:2:170:29 | ... := ...[0] | test.go:171:57:171:61 | file2 | provenance | | -| test.go:170:25:170:28 | file | test.go:170:2:170:29 | ... := ...[0] | provenance | MaD:620 | +| test.go:170:25:170:28 | file | test.go:170:2:170:29 | ... := ...[0] | provenance | MaD:667 | | test.go:171:2:171:78 | ... := ...[0] | test.go:175:26:175:29 | file | provenance | | | test.go:171:41:171:62 | call to NewReader | test.go:171:2:171:78 | ... := ...[0] | provenance | Config | | test.go:171:57:171:61 | file2 | test.go:171:41:171:62 | call to NewReader | provenance | MaD:46 | diff --git a/go/ql/test/experimental/CWE-74/DsnInjection.expected b/go/ql/test/experimental/CWE-74/DsnInjection.expected index d305280c9e11..901f9fed3682 100644 --- a/go/ql/test/experimental/CWE-74/DsnInjection.expected +++ b/go/ql/test/experimental/CWE-74/DsnInjection.expected @@ -1,5 +1,5 @@ edges -| Dsn.go:47:10:47:30 | call to FormValue | Dsn.go:49:102:49:105 | name | provenance | Src:MaD:743 | +| Dsn.go:47:10:47:30 | call to FormValue | Dsn.go:49:102:49:105 | name | provenance | Src:MaD:790 | | Dsn.go:49:11:49:106 | []type{args} [array] | Dsn.go:49:11:49:106 | call to Sprintf | provenance | MaD:248 | | Dsn.go:49:11:49:106 | call to Sprintf | Dsn.go:50:29:50:33 | dbDSN | provenance | | | Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | []type{args} [array] | provenance | | diff --git a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected b/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected index c697e5398030..28eb20587b68 100644 --- a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected +++ b/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected @@ -1,28 +1,28 @@ edges | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | provenance | | -| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | provenance | | -| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | provenance | | -| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | provenance | | -| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | provenance | | -| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | provenance | | -| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | Src:MaD:747 | -| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | provenance | Src:MaD:747 | -| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | provenance | Src:MaD:747 | -| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | provenance | Src:MaD:747 | +| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | Src:MaD:794 | +| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | provenance | Src:MaD:794 | +| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | provenance | Src:MaD:794 | +| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | provenance | Src:MaD:794 | | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | provenance | | | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | provenance | | -| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | provenance | MaD:595 | +| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | provenance | MaD:642 | nodes | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | semmle.label | type conversion | | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | semmle.label | call to UserAgent | diff --git a/go/ql/test/experimental/CWE-918/SSRF.expected b/go/ql/test/experimental/CWE-918/SSRF.expected index 92b571da8e4b..1e8f3bcd393c 100644 --- a/go/ql/test/experimental/CWE-918/SSRF.expected +++ b/go/ql/test/experimental/CWE-918/SSRF.expected @@ -1,12 +1,12 @@ edges -| builtin.go:19:12:19:34 | call to FormValue | builtin.go:22:21:22:62 | ...+... | provenance | Src:MaD:743 | -| builtin.go:83:21:83:31 | call to Referer | builtin.go:88:27:88:40 | untrustedInput | provenance | Src:MaD:746 | -| builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | provenance | Src:MaD:746 | -| builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | provenance | Src:MaD:746 | -| builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | provenance | Src:MaD:746 | -| new-tests.go:26:26:26:30 | &... | new-tests.go:31:48:31:56 | selection of word | provenance | | -| new-tests.go:26:26:26:30 | &... | new-tests.go:32:48:32:56 | selection of safe | provenance | | -| new-tests.go:26:26:26:30 | &... | new-tests.go:35:49:35:57 | selection of word | provenance | | +| builtin.go:19:12:19:34 | call to FormValue | builtin.go:22:21:22:62 | ...+... | provenance | Src:MaD:790 | +| builtin.go:83:21:83:31 | call to Referer | builtin.go:88:27:88:40 | untrustedInput | provenance | Src:MaD:793 | +| builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | provenance | Src:MaD:793 | +| builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | provenance | Src:MaD:793 | +| builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | provenance | Src:MaD:793 | +| new-tests.go:26:26:26:30 | &... | new-tests.go:31:48:31:56 | selection of word | provenance | Src:MaD:402 | +| new-tests.go:26:26:26:30 | &... | new-tests.go:32:48:32:56 | selection of safe | provenance | Src:MaD:402 | +| new-tests.go:26:26:26:30 | &... | new-tests.go:35:49:35:57 | selection of word | provenance | Src:MaD:402 | | new-tests.go:31:11:31:57 | []type{args} [array] | new-tests.go:31:11:31:57 | call to Sprintf | provenance | MaD:248 | | new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | []type{args} [array] | provenance | | | new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | call to Sprintf | provenance | FunctionModel | @@ -16,10 +16,10 @@ edges | new-tests.go:35:12:35:58 | []type{args} [array] | new-tests.go:35:12:35:58 | call to Sprintf | provenance | MaD:248 | | new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | []type{args} [array] | provenance | | | new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | call to Sprintf | provenance | FunctionModel | -| new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | provenance | | -| new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | provenance | | +| new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | provenance | Src:MaD:391 | +| new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | provenance | Src:MaD:396 | | new-tests.go:62:2:62:39 | ... := ...[0] | new-tests.go:63:17:63:23 | reqBody | provenance | | -| new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | provenance | MaD:613 | +| new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | provenance | Src:MaD:795 MaD:660 | | new-tests.go:63:17:63:23 | reqBody | new-tests.go:63:26:63:30 | &... | provenance | MaD:187 | | new-tests.go:63:26:63:30 | &... | new-tests.go:68:48:68:56 | selection of word | provenance | | | new-tests.go:63:26:63:30 | &... | new-tests.go:69:48:69:56 | selection of safe | provenance | | @@ -33,14 +33,14 @@ edges | new-tests.go:74:12:74:58 | []type{args} [array] | new-tests.go:74:12:74:58 | call to Sprintf | provenance | MaD:248 | | new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | []type{args} [array] | provenance | | | new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | call to Sprintf | provenance | FunctionModel | -| new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | provenance | MaD:808 | -| new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | provenance | MaD:815 | +| new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | provenance | Src:MaD:802 MaD:863 | +| new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | provenance | MaD:870 | | new-tests.go:78:18:78:46 | call to Get | new-tests.go:79:11:79:46 | ...+... | provenance | | | new-tests.go:81:18:81:67 | call to TrimPrefix | new-tests.go:82:11:82:46 | ...+... | provenance | | -| new-tests.go:81:37:81:43 | selection of URL | new-tests.go:81:37:81:48 | selection of Path | provenance | | -| new-tests.go:81:37:81:48 | selection of Path | new-tests.go:81:18:81:67 | call to TrimPrefix | provenance | MaD:931 | -| new-tests.go:86:10:86:20 | call to Vars | new-tests.go:88:11:88:46 | ...+... | provenance | | -| new-tests.go:95:18:95:45 | call to URLParam | new-tests.go:96:11:96:46 | ...+... | provenance | | +| new-tests.go:81:37:81:43 | selection of URL | new-tests.go:81:37:81:48 | selection of Path | provenance | Src:MaD:802 | +| new-tests.go:81:37:81:48 | selection of Path | new-tests.go:81:18:81:67 | call to TrimPrefix | provenance | MaD:988 | +| new-tests.go:86:10:86:20 | call to Vars | new-tests.go:88:11:88:46 | ...+... | provenance | Src:MaD:447 | +| new-tests.go:95:18:95:45 | call to URLParam | new-tests.go:96:11:96:46 | ...+... | provenance | Src:MaD:408 | nodes | builtin.go:19:12:19:34 | call to FormValue | semmle.label | call to FormValue | | builtin.go:22:21:22:62 | ...+... | semmle.label | ...+... | diff --git a/go/ql/test/library-tests/semmle/go/concepts/HTTP/RemoteFlowSources.ql b/go/ql/test/library-tests/semmle/go/concepts/HTTP/RemoteFlowSources.ql index d56a98686e0c..9e68fd210ff2 100644 --- a/go/ql/test/library-tests/semmle/go/concepts/HTTP/RemoteFlowSources.ql +++ b/go/ql/test/library-tests/semmle/go/concepts/HTTP/RemoteFlowSources.ql @@ -1,3 +1,3 @@ import go -select any(RemoteFlowSource ufs) +select any(RemoteFlowSource rfs) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/Builtin.go b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/Builtin.go index 18f213194eb3..ee22b71d3905 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/Builtin.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/Builtin.go @@ -8,9 +8,38 @@ func clearTestBad(sourceReq *http.Request) string { return string(b) } +func clearTestBad2(sourceReq *http.Request, x bool) string { + b := make([]byte, 8) + sourceReq.Body.Read(b) + if x { + clear(b) + } + return string(b) +} + +func clearTestBad3(sourceReq *http.Request, x bool) string { + b := make([]byte, 8) + sourceReq.Body.Read(b) + if x { + return string(b) + } + clear(b) + return string(b) +} + func clearTestGood(sourceReq *http.Request) string { b := make([]byte, 8) sourceReq.Body.Read(b) clear(b) // should prevent taint flow return string(b) } + +func clearTestGood2(sourceReq *http.Request, x bool) string { + b := make([]byte, 8) + sourceReq.Body.Read(b) + clear(b) // should prevent taint flow + if x { + return string(b) + } + return "" +} diff --git a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected index d4cc03e2bf41..dd113996a23e 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected @@ -1,10 +1,22 @@ edges | Builtin.go:6:2:6:2 | definition of b | Builtin.go:8:9:8:17 | type conversion | provenance | | -| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | MaD:626 | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:795 MaD:673 | +| Builtin.go:12:2:12:2 | definition of b | Builtin.go:17:9:17:17 | type conversion | provenance | | +| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:795 MaD:673 | +| Builtin.go:21:2:21:2 | definition of b | Builtin.go:24:10:24:18 | type conversion | provenance | | +| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:795 MaD:673 | nodes | Builtin.go:6:2:6:2 | definition of b | semmle.label | definition of b | | Builtin.go:7:2:7:15 | selection of Body | semmle.label | selection of Body | | Builtin.go:8:9:8:17 | type conversion | semmle.label | type conversion | +| Builtin.go:12:2:12:2 | definition of b | semmle.label | definition of b | +| Builtin.go:13:2:13:15 | selection of Body | semmle.label | selection of Body | +| Builtin.go:17:9:17:17 | type conversion | semmle.label | type conversion | +| Builtin.go:21:2:21:2 | definition of b | semmle.label | definition of b | +| Builtin.go:22:2:22:15 | selection of Body | semmle.label | selection of Body | +| Builtin.go:24:10:24:18 | type conversion | semmle.label | type conversion | subpaths #select | Builtin.go:8:9:8:17 | type conversion | Builtin.go:7:2:7:15 | selection of Body | Builtin.go:8:9:8:17 | type conversion | Found taint flow | +| Builtin.go:17:9:17:17 | type conversion | Builtin.go:13:2:13:15 | selection of Body | Builtin.go:17:9:17:17 | type conversion | Found taint flow | +| Builtin.go:24:10:24:18 | type conversion | Builtin.go:22:2:22:15 | selection of Body | Builtin.go:24:10:24:18 | type conversion | Found taint flow | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest1.expected b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest1.expected index 048fde10674e..30671016dced 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest1.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest1.expected @@ -1,6 +1,6 @@ edges -| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | MaD:808 | -| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:815 | +| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | Src:MaD:802 MaD:863 | +| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:870 | | test.go:32:11:32:36 | call to Get | test.go:34:7:34:30 | ...+... | provenance | | nodes | test.go:32:11:32:15 | selection of URL | semmle.label | selection of URL | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest2.expected b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest2.expected index 7c9b9865e855..3d4edb738084 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest2.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest2.expected @@ -1,7 +1,7 @@ edges | test.go:27:11:27:63 | call to ExecuteQuery | test.go:28:7:28:11 | query | provenance | Src:MaD:1 | -| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | MaD:808 | -| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:815 | +| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | Src:MaD:802 MaD:863 | +| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:870 | | test.go:32:11:32:36 | call to Get | test.go:34:7:34:30 | ...+... | provenance | | nodes | test.go:27:11:27:63 | call to ExecuteQuery | semmle.label | call to ExecuteQuery | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest3.expected b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest3.expected index 8d488a8346bc..401b39a979a5 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest3.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest3.expected @@ -2,8 +2,8 @@ edges | test.go:9:10:9:40 | call to ReadEnvironment | test.go:11:7:11:29 | ...+... | provenance | Src:MaD:2 | | test.go:15:9:15:32 | call to GetCliArg | test.go:17:7:17:28 | ...+... | provenance | Src:MaD:4 | | test.go:27:11:27:63 | call to ExecuteQuery | test.go:28:7:28:11 | query | provenance | Src:MaD:1 | -| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | MaD:808 | -| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:815 | +| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | Src:MaD:802 MaD:863 | +| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:870 | | test.go:32:11:32:36 | call to Get | test.go:34:7:34:30 | ...+... | provenance | | nodes | test.go:9:10:9:40 | call to ReadEnvironment | semmle.label | call to ReadEnvironment | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest4.expected b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest4.expected index df5bff83eb7a..c5d3e018e70c 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest4.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest4.expected @@ -3,8 +3,8 @@ edges | test.go:15:9:15:32 | call to GetCliArg | test.go:17:7:17:28 | ...+... | provenance | Src:MaD:4 | | test.go:21:11:21:36 | call to GetCustom | test.go:23:7:23:30 | ...+... | provenance | Src:MaD:3 | | test.go:27:11:27:63 | call to ExecuteQuery | test.go:28:7:28:11 | query | provenance | Src:MaD:1 | -| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | MaD:808 | -| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:815 | +| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | Src:MaD:802 MaD:863 | +| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:870 | | test.go:32:11:32:36 | call to Get | test.go:34:7:34:30 | ...+... | provenance | | nodes | test.go:9:10:9:40 | call to ReadEnvironment | semmle.label | call to ReadEnvironment | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest5.expected b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest5.expected index 824d22e1e91e..312c91e1c4bf 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest5.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest5.expected @@ -1,8 +1,8 @@ edges | test.go:9:10:9:40 | call to ReadEnvironment | test.go:11:7:11:29 | ...+... | provenance | Src:MaD:3 | | test.go:15:9:15:32 | call to GetCliArg | test.go:17:7:17:28 | ...+... | provenance | Src:MaD:5 | -| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | MaD:808 | -| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:815 | +| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | Src:MaD:802 MaD:863 | +| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:870 | | test.go:32:11:32:36 | call to Get | test.go:34:7:34:30 | ...+... | provenance | | nodes | test.go:9:10:9:40 | call to ReadEnvironment | semmle.label | call to ReadEnvironment | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest6.expected b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest6.expected index 789c6d954c8c..7e30904b70cc 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest6.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ThreatModels/threat-models-flowtest6.expected @@ -1,8 +1,8 @@ edges | test.go:15:9:15:32 | call to GetCliArg | test.go:17:7:17:28 | ...+... | provenance | Src:MaD:5 | | test.go:27:11:27:63 | call to ExecuteQuery | test.go:28:7:28:11 | query | provenance | Src:MaD:2 | -| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | MaD:808 | -| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:815 | +| test.go:32:11:32:15 | selection of URL | test.go:32:11:32:23 | call to Query | provenance | Src:MaD:802 MaD:863 | +| test.go:32:11:32:23 | call to Query | test.go:32:11:32:36 | call to Get | provenance | MaD:870 | | test.go:32:11:32:36 | call to Get | test.go:34:7:34:30 | ...+... | provenance | | nodes | test.go:15:9:15:32 | call to GetCliArg | semmle.label | call to GetCliArg | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected index 6845b74b9126..fd6f8095ccc2 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected @@ -1,104 +1,104 @@ edges -| test.go:33:6:33:10 | definition of bound | test.go:35:13:35:30 | type conversion | provenance | Src:MaD:252 | -| test.go:33:6:33:10 | definition of bound | test.go:36:13:36:27 | type conversion | provenance | Src:MaD:252 | -| test.go:33:6:33:10 | definition of bound | test.go:37:13:37:29 | type conversion | provenance | Src:MaD:252 | -| test.go:42:20:42:42 | call to Cookie | test.go:42:13:42:43 | type conversion | provenance | Src:MaD:253 | -| test.go:47:20:47:31 | call to Data | test.go:47:13:47:52 | type conversion | provenance | Src:MaD:254 | -| test.go:52:20:52:43 | call to GetData | test.go:52:13:52:53 | type conversion | provenance | Src:MaD:255 | -| test.go:57:20:57:42 | call to Header | test.go:57:13:57:43 | type conversion | provenance | Src:MaD:256 | -| test.go:62:20:62:41 | call to Param | test.go:62:13:62:42 | type conversion | provenance | Src:MaD:257 | -| test.go:67:20:67:33 | call to Params | test.go:67:13:67:45 | type conversion | provenance | Src:MaD:258 | -| test.go:72:20:72:41 | call to Query | test.go:72:13:72:42 | type conversion | provenance | Src:MaD:259 | -| test.go:77:20:77:32 | call to Refer | test.go:77:13:77:33 | type conversion | provenance | Src:MaD:260 | -| test.go:82:20:82:34 | call to Referer | test.go:82:13:82:35 | type conversion | provenance | Src:MaD:261 | -| test.go:87:20:87:30 | call to URI | test.go:87:13:87:31 | type conversion | provenance | Src:MaD:263 | -| test.go:92:20:92:30 | call to URL | test.go:92:13:92:31 | type conversion | provenance | Src:MaD:264 | -| test.go:97:20:97:36 | call to UserAgent | test.go:97:13:97:37 | type conversion | provenance | Src:MaD:265 | -| test.go:102:14:102:25 | call to Data | test.go:102:14:102:45 | type assertion | provenance | Src:MaD:254 | -| test.go:114:14:114:25 | call to Data | test.go:114:14:114:45 | type assertion | provenance | Src:MaD:254 | -| test.go:126:14:126:25 | call to Data | test.go:126:14:126:45 | type assertion | provenance | Src:MaD:254 | -| test.go:143:23:143:42 | call to Data | test.go:143:23:143:62 | type assertion | provenance | Src:MaD:254 | -| test.go:199:15:199:26 | call to Data | test.go:200:36:200:53 | type assertion | provenance | Src:MaD:254 | -| test.go:199:15:199:26 | call to Data | test.go:201:39:201:56 | type assertion | provenance | Src:MaD:254 | -| test.go:199:15:199:26 | call to Data | test.go:202:28:202:56 | type assertion | provenance | Src:MaD:254 | -| test.go:199:15:199:26 | call to Data | test.go:204:36:204:53 | type assertion | provenance | Src:MaD:254 | -| test.go:199:15:199:26 | call to Data | test.go:205:34:205:51 | type assertion | provenance | Src:MaD:254 | +| test.go:33:6:33:10 | definition of bound | test.go:35:13:35:30 | type conversion | provenance | Src:MaD:270 | +| test.go:33:6:33:10 | definition of bound | test.go:36:13:36:27 | type conversion | provenance | Src:MaD:270 | +| test.go:33:6:33:10 | definition of bound | test.go:37:13:37:29 | type conversion | provenance | Src:MaD:270 | +| test.go:42:20:42:42 | call to Cookie | test.go:42:13:42:43 | type conversion | provenance | Src:MaD:271 | +| test.go:47:20:47:31 | call to Data | test.go:47:13:47:52 | type conversion | provenance | Src:MaD:272 | +| test.go:52:20:52:43 | call to GetData | test.go:52:13:52:53 | type conversion | provenance | Src:MaD:273 | +| test.go:57:20:57:42 | call to Header | test.go:57:13:57:43 | type conversion | provenance | Src:MaD:274 | +| test.go:62:20:62:41 | call to Param | test.go:62:13:62:42 | type conversion | provenance | Src:MaD:275 | +| test.go:67:20:67:33 | call to Params | test.go:67:13:67:45 | type conversion | provenance | Src:MaD:276 | +| test.go:72:20:72:41 | call to Query | test.go:72:13:72:42 | type conversion | provenance | Src:MaD:277 | +| test.go:77:20:77:32 | call to Refer | test.go:77:13:77:33 | type conversion | provenance | Src:MaD:278 | +| test.go:82:20:82:34 | call to Referer | test.go:82:13:82:35 | type conversion | provenance | Src:MaD:279 | +| test.go:87:20:87:30 | call to URI | test.go:87:13:87:31 | type conversion | provenance | Src:MaD:281 | +| test.go:92:20:92:30 | call to URL | test.go:92:13:92:31 | type conversion | provenance | Src:MaD:282 | +| test.go:97:20:97:36 | call to UserAgent | test.go:97:13:97:37 | type conversion | provenance | Src:MaD:283 | +| test.go:102:14:102:25 | call to Data | test.go:102:14:102:45 | type assertion | provenance | Src:MaD:272 | +| test.go:114:14:114:25 | call to Data | test.go:114:14:114:45 | type assertion | provenance | Src:MaD:272 | +| test.go:126:14:126:25 | call to Data | test.go:126:14:126:45 | type assertion | provenance | Src:MaD:272 | +| test.go:143:23:143:42 | call to Data | test.go:143:23:143:62 | type assertion | provenance | Src:MaD:272 | +| test.go:199:15:199:26 | call to Data | test.go:200:36:200:53 | type assertion | provenance | Src:MaD:272 | +| test.go:199:15:199:26 | call to Data | test.go:201:39:201:56 | type assertion | provenance | Src:MaD:272 | +| test.go:199:15:199:26 | call to Data | test.go:202:28:202:56 | type assertion | provenance | Src:MaD:272 | +| test.go:199:15:199:26 | call to Data | test.go:204:36:204:53 | type assertion | provenance | Src:MaD:272 | +| test.go:199:15:199:26 | call to Data | test.go:205:34:205:51 | type assertion | provenance | Src:MaD:272 | | test.go:200:21:200:54 | call to HTML2str | test.go:200:14:200:55 | type conversion | provenance | | -| test.go:200:36:200:53 | type assertion | test.go:200:21:200:54 | call to HTML2str | provenance | MaD:297 | +| test.go:200:36:200:53 | type assertion | test.go:200:21:200:54 | call to HTML2str | provenance | MaD:288 | | test.go:201:21:201:57 | call to Htmlunquote | test.go:201:14:201:58 | type conversion | provenance | | -| test.go:201:39:201:56 | type assertion | test.go:201:21:201:57 | call to Htmlunquote | provenance | MaD:299 | +| test.go:201:39:201:56 | type assertion | test.go:201:21:201:57 | call to Htmlunquote | provenance | MaD:290 | | test.go:202:2:202:68 | ... := ...[0] | test.go:203:14:203:28 | type assertion | provenance | | -| test.go:202:28:202:56 | type assertion | test.go:202:2:202:68 | ... := ...[0] | provenance | MaD:300 | +| test.go:202:28:202:56 | type assertion | test.go:202:2:202:68 | ... := ...[0] | provenance | MaD:291 | | test.go:204:21:204:54 | call to Str2html | test.go:204:14:204:55 | type conversion | provenance | | -| test.go:204:36:204:53 | type assertion | test.go:204:21:204:54 | call to Str2html | provenance | MaD:302 | +| test.go:204:36:204:53 | type assertion | test.go:204:21:204:54 | call to Str2html | provenance | MaD:293 | | test.go:205:21:205:58 | call to Substr | test.go:205:14:205:59 | type conversion | provenance | | -| test.go:205:34:205:51 | type assertion | test.go:205:21:205:58 | call to Substr | provenance | MaD:303 | +| test.go:205:34:205:51 | type assertion | test.go:205:21:205:58 | call to Substr | provenance | MaD:294 | | test.go:207:6:207:6 | definition of s | test.go:209:14:209:28 | type conversion | provenance | | -| test.go:208:18:208:33 | selection of Form | test.go:207:6:207:6 | definition of s | provenance | MaD:301 | -| test.go:223:2:223:34 | ... := ...[0] | test.go:225:31:225:31 | f | provenance | Src:MaD:319 | -| test.go:223:2:223:34 | ... := ...[1] | test.go:224:14:224:32 | type conversion | provenance | Src:MaD:319 | +| test.go:208:18:208:33 | selection of Form | test.go:207:6:207:6 | definition of s | provenance | Src:MaD:797 MaD:292 | +| test.go:223:2:223:34 | ... := ...[0] | test.go:225:31:225:31 | f | provenance | Src:MaD:296 | +| test.go:223:2:223:34 | ... := ...[1] | test.go:224:14:224:32 | type conversion | provenance | Src:MaD:296 | | test.go:225:2:225:32 | ... := ...[0] | test.go:226:14:226:20 | content | provenance | | -| test.go:225:31:225:31 | f | test.go:225:2:225:32 | ... := ...[0] | provenance | MaD:613 | -| test.go:228:2:228:40 | ... := ...[0] | test.go:229:14:229:38 | type conversion | provenance | Src:MaD:320 | -| test.go:231:7:231:28 | call to GetString | test.go:232:14:232:22 | type conversion | provenance | Src:MaD:321 | -| test.go:234:8:234:35 | call to GetStrings | test.go:235:14:235:26 | type conversion | provenance | Src:MaD:322 | -| test.go:237:9:237:17 | call to Input | test.go:238:14:238:27 | type conversion | provenance | Src:MaD:323 | -| test.go:240:6:240:8 | definition of str | test.go:242:14:242:30 | type conversion | provenance | Src:MaD:318 | -| test.go:246:15:246:36 | call to GetString | test.go:249:21:249:29 | untrusted | provenance | Src:MaD:321 | -| test.go:259:23:259:44 | call to GetCookie | test.go:259:16:259:45 | type conversion | provenance | Src:MaD:266 | -| test.go:270:62:270:83 | call to GetCookie | test.go:270:55:270:84 | type conversion | provenance | Src:MaD:266 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:278:21:278:28 | index expression | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:283:44:283:60 | selection of Filename | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:284:38:284:49 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:285:37:285:48 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:291:4:291:15 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:293:42:293:53 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:294:53:294:64 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:295:38:295:49 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:296:49:296:60 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:297:51:297:65 | index expression | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:298:36:298:47 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:299:37:299:48 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:301:39:301:50 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:302:40:302:51 | genericFiles | provenance | Src:MaD:320 | -| test.go:275:2:275:40 | ... := ...[0] | test.go:303:39:303:50 | genericFiles | provenance | Src:MaD:320 | +| test.go:225:31:225:31 | f | test.go:225:2:225:32 | ... := ...[0] | provenance | MaD:660 | +| test.go:228:2:228:40 | ... := ...[0] | test.go:229:14:229:38 | type conversion | provenance | Src:MaD:297 | +| test.go:231:7:231:28 | call to GetString | test.go:232:14:232:22 | type conversion | provenance | Src:MaD:298 | +| test.go:234:8:234:35 | call to GetStrings | test.go:235:14:235:26 | type conversion | provenance | Src:MaD:299 | +| test.go:237:9:237:17 | call to Input | test.go:238:14:238:27 | type conversion | provenance | Src:MaD:300 | +| test.go:240:6:240:8 | definition of str | test.go:242:14:242:30 | type conversion | provenance | Src:MaD:295 | +| test.go:246:15:246:36 | call to GetString | test.go:249:21:249:29 | untrusted | provenance | Src:MaD:298 | +| test.go:259:23:259:44 | call to GetCookie | test.go:259:16:259:45 | type conversion | provenance | Src:MaD:284 | +| test.go:270:62:270:83 | call to GetCookie | test.go:270:55:270:84 | type conversion | provenance | Src:MaD:284 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:278:21:278:28 | index expression | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:283:44:283:60 | selection of Filename | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:284:38:284:49 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:285:37:285:48 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:291:4:291:15 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:293:42:293:53 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:294:53:294:64 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:295:38:295:49 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:296:49:296:60 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:297:51:297:65 | index expression | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:298:36:298:47 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:299:37:299:48 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:301:39:301:50 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:302:40:302:51 | genericFiles | provenance | Src:MaD:297 | +| test.go:275:2:275:40 | ... := ...[0] | test.go:303:39:303:50 | genericFiles | provenance | Src:MaD:297 | | test.go:276:2:276:13 | definition of genericFiles [array] | test.go:297:51:297:62 | genericFiles [array] | provenance | | | test.go:278:21:278:28 | index expression | test.go:276:2:276:13 | definition of genericFiles [array] | provenance | | | test.go:283:44:283:60 | selection of Filename | test.go:283:21:283:61 | call to GetDisplayString | provenance | FunctionModel | | test.go:284:21:284:53 | call to SliceChunk | test.go:284:21:284:92 | selection of Filename | provenance | | -| test.go:284:38:284:49 | genericFiles | test.go:284:21:284:53 | call to SliceChunk | provenance | MaD:336 | +| test.go:284:38:284:49 | genericFiles | test.go:284:21:284:53 | call to SliceChunk | provenance | MaD:253 | | test.go:285:21:285:60 | call to SliceDiff | test.go:285:21:285:96 | selection of Filename | provenance | | -| test.go:285:37:285:48 | genericFiles | test.go:285:21:285:60 | call to SliceDiff | provenance | MaD:337 | +| test.go:285:37:285:48 | genericFiles | test.go:285:21:285:60 | call to SliceDiff | provenance | MaD:254 | | test.go:290:3:292:44 | call to SliceFilter | test.go:290:3:292:80 | selection of Filename | provenance | | -| test.go:291:4:291:15 | genericFiles | test.go:290:3:292:44 | call to SliceFilter | provenance | MaD:338 | +| test.go:291:4:291:15 | genericFiles | test.go:290:3:292:44 | call to SliceFilter | provenance | MaD:255 | | test.go:293:21:293:65 | call to SliceIntersect | test.go:293:21:293:101 | selection of Filename | provenance | | -| test.go:293:42:293:53 | genericFiles | test.go:293:21:293:65 | call to SliceIntersect | provenance | MaD:339 | +| test.go:293:42:293:53 | genericFiles | test.go:293:21:293:65 | call to SliceIntersect | provenance | MaD:256 | | test.go:294:21:294:65 | call to SliceIntersect | test.go:294:21:294:101 | selection of Filename | provenance | | -| test.go:294:53:294:64 | genericFiles | test.go:294:21:294:65 | call to SliceIntersect | provenance | MaD:339 | +| test.go:294:53:294:64 | genericFiles | test.go:294:21:294:65 | call to SliceIntersect | provenance | MaD:256 | | test.go:295:21:295:61 | call to SliceMerge | test.go:295:21:295:97 | selection of Filename | provenance | | -| test.go:295:38:295:49 | genericFiles | test.go:295:21:295:61 | call to SliceMerge | provenance | MaD:340 | +| test.go:295:38:295:49 | genericFiles | test.go:295:21:295:61 | call to SliceMerge | provenance | MaD:257 | | test.go:296:21:296:61 | call to SliceMerge | test.go:296:21:296:97 | selection of Filename | provenance | | -| test.go:296:49:296:60 | genericFiles | test.go:296:21:296:61 | call to SliceMerge | provenance | MaD:340 | +| test.go:296:49:296:60 | genericFiles | test.go:296:21:296:61 | call to SliceMerge | provenance | MaD:257 | | test.go:297:21:297:66 | call to SlicePad | test.go:297:21:297:102 | selection of Filename | provenance | | | test.go:297:51:297:62 | genericFiles [array] | test.go:297:51:297:65 | index expression | provenance | | -| test.go:297:51:297:65 | index expression | test.go:297:21:297:66 | call to SlicePad | provenance | MaD:341 | +| test.go:297:51:297:65 | index expression | test.go:297:21:297:66 | call to SlicePad | provenance | MaD:258 | | test.go:298:21:298:66 | call to SlicePad | test.go:298:21:298:102 | selection of Filename | provenance | | -| test.go:298:36:298:47 | genericFiles | test.go:298:21:298:66 | call to SlicePad | provenance | MaD:341 | +| test.go:298:36:298:47 | genericFiles | test.go:298:21:298:66 | call to SlicePad | provenance | MaD:258 | | test.go:299:21:299:49 | call to SliceRand | test.go:299:21:299:82 | selection of Filename | provenance | | -| test.go:299:37:299:48 | genericFiles | test.go:299:21:299:49 | call to SliceRand | provenance | MaD:342 | +| test.go:299:37:299:48 | genericFiles | test.go:299:21:299:49 | call to SliceRand | provenance | MaD:259 | | test.go:301:21:301:97 | call to SliceReduce | test.go:301:21:301:133 | selection of Filename | provenance | | -| test.go:301:39:301:50 | genericFiles | test.go:301:21:301:97 | call to SliceReduce | provenance | MaD:343 | +| test.go:301:39:301:50 | genericFiles | test.go:301:21:301:97 | call to SliceReduce | provenance | MaD:260 | | test.go:302:21:302:52 | call to SliceShuffle | test.go:302:21:302:88 | selection of Filename | provenance | | -| test.go:302:40:302:51 | genericFiles | test.go:302:21:302:52 | call to SliceShuffle | provenance | MaD:344 | +| test.go:302:40:302:51 | genericFiles | test.go:302:21:302:52 | call to SliceShuffle | provenance | MaD:261 | | test.go:303:21:303:51 | call to SliceUnique | test.go:303:21:303:87 | selection of Filename | provenance | | -| test.go:303:39:303:50 | genericFiles | test.go:303:21:303:51 | call to SliceUnique | provenance | MaD:345 | +| test.go:303:39:303:50 | genericFiles | test.go:303:21:303:51 | call to SliceUnique | provenance | MaD:262 | | test.go:308:2:308:5 | definition of bMap | test.go:311:21:311:24 | bMap | provenance | | | test.go:308:2:308:5 | definition of bMap | test.go:312:21:312:24 | bMap | provenance | | -| test.go:309:15:309:36 | call to GetString | test.go:310:22:310:30 | untrusted | provenance | Src:MaD:321 | -| test.go:310:22:310:30 | untrusted | test.go:308:2:308:5 | definition of bMap | provenance | MaD:348 | -| test.go:311:21:311:24 | bMap | test.go:311:21:311:39 | call to Get | provenance | MaD:346 | +| test.go:309:15:309:36 | call to GetString | test.go:310:22:310:30 | untrusted | provenance | Src:MaD:298 | +| test.go:310:22:310:30 | untrusted | test.go:308:2:308:5 | definition of bMap | provenance | MaD:265 | +| test.go:311:21:311:24 | bMap | test.go:311:21:311:39 | call to Get | provenance | MaD:263 | | test.go:311:21:311:39 | call to Get | test.go:311:21:311:48 | type assertion | provenance | | -| test.go:312:21:312:24 | bMap | test.go:312:21:312:32 | call to Items | provenance | MaD:347 | +| test.go:312:21:312:24 | bMap | test.go:312:21:312:32 | call to Items | provenance | MaD:264 | | test.go:312:21:312:32 | call to Items | test.go:312:21:312:52 | type assertion | provenance | | nodes | test.go:33:6:33:10 | definition of bound | semmle.label | definition of bound | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected index 9681164d8259..001f56be494f 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected @@ -1,12 +1,12 @@ edges -| test.go:215:15:215:26 | call to Data | test.go:216:18:216:26 | untrusted | provenance | Src:MaD:254 | -| test.go:215:15:215:26 | call to Data | test.go:217:10:217:18 | untrusted | provenance | Src:MaD:254 | -| test.go:215:15:215:26 | call to Data | test.go:218:35:218:43 | untrusted | provenance | Src:MaD:254 | -| test.go:324:17:324:37 | selection of RequestBody | test.go:324:40:324:43 | &... | provenance | Src:MaD:262 MaD:187 | +| test.go:215:15:215:26 | call to Data | test.go:216:18:216:26 | untrusted | provenance | Src:MaD:272 | +| test.go:215:15:215:26 | call to Data | test.go:217:10:217:18 | untrusted | provenance | Src:MaD:272 | +| test.go:215:15:215:26 | call to Data | test.go:218:35:218:43 | untrusted | provenance | Src:MaD:272 | +| test.go:324:17:324:37 | selection of RequestBody | test.go:324:40:324:43 | &... | provenance | Src:MaD:280 MaD:187 | | test.go:324:40:324:43 | &... | test.go:326:35:326:43 | untrusted | provenance | | -| test.go:332:15:332:26 | call to Data | test.go:334:23:334:31 | untrusted | provenance | Src:MaD:254 | -| test.go:340:15:340:26 | call to Data | test.go:342:53:342:61 | untrusted | provenance | Src:MaD:284 | -| test.go:340:15:340:26 | call to Data | test.go:344:23:344:31 | untrusted | provenance | Src:MaD:284 | +| test.go:332:15:332:26 | call to Data | test.go:334:23:334:31 | untrusted | provenance | Src:MaD:272 | +| test.go:340:15:340:26 | call to Data | test.go:342:53:342:61 | untrusted | provenance | Src:MaD:272 | +| test.go:340:15:340:26 | call to Data | test.go:344:23:344:31 | untrusted | provenance | Src:MaD:272 | nodes | test.go:215:15:215:26 | call to Data | semmle.label | call to Data | | test.go:216:18:216:26 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected index cf07b5e5f74a..3122b2d22615 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected @@ -1,36 +1,36 @@ edges -| test.go:10:15:10:41 | call to UserAgent | test.go:12:11:12:19 | untrusted | provenance | Src:MaD:747 | -| test.go:10:15:10:41 | call to UserAgent | test.go:13:23:13:31 | untrusted | provenance | Src:MaD:747 | -| test.go:10:15:10:41 | call to UserAgent | test.go:14:14:14:22 | untrusted | provenance | Src:MaD:747 | -| test.go:10:15:10:41 | call to UserAgent | test.go:15:26:15:34 | untrusted | provenance | Src:MaD:747 | -| test.go:10:15:10:41 | call to UserAgent | test.go:16:12:16:20 | untrusted | provenance | Src:MaD:747 | -| test.go:10:15:10:41 | call to UserAgent | test.go:17:24:17:32 | untrusted | provenance | Src:MaD:747 | -| test.go:10:15:10:41 | call to UserAgent | test.go:18:15:18:23 | untrusted | provenance | Src:MaD:747 | -| test.go:10:15:10:41 | call to UserAgent | test.go:19:27:19:35 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:26:12:26:20 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:27:10:27:18 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:28:15:28:23 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:29:14:29:22 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:30:15:30:23 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:31:8:31:16 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:32:11:32:19 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:33:9:33:17 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:34:8:34:16 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:35:8:35:16 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:36:13:36:21 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:37:13:37:21 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:38:12:38:20 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:39:12:39:20 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:40:9:40:17 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:41:12:41:20 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:42:16:42:24 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:42:27:42:35 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:43:12:43:20 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:44:14:44:22 | untrusted | provenance | Src:MaD:747 | -| test.go:24:15:24:41 | call to UserAgent | test.go:44:25:44:33 | untrusted | provenance | Src:MaD:747 | -| test.go:48:15:48:41 | call to UserAgent | test.go:49:12:49:20 | untrusted | provenance | Src:MaD:747 | -| test.go:54:15:54:41 | call to UserAgent | test.go:56:31:56:39 | untrusted | provenance | Src:MaD:747 | -| test.go:60:15:60:41 | call to UserAgent | test.go:62:19:62:27 | untrusted | provenance | Src:MaD:747 | +| test.go:10:15:10:41 | call to UserAgent | test.go:12:11:12:19 | untrusted | provenance | Src:MaD:794 | +| test.go:10:15:10:41 | call to UserAgent | test.go:13:23:13:31 | untrusted | provenance | Src:MaD:794 | +| test.go:10:15:10:41 | call to UserAgent | test.go:14:14:14:22 | untrusted | provenance | Src:MaD:794 | +| test.go:10:15:10:41 | call to UserAgent | test.go:15:26:15:34 | untrusted | provenance | Src:MaD:794 | +| test.go:10:15:10:41 | call to UserAgent | test.go:16:12:16:20 | untrusted | provenance | Src:MaD:794 | +| test.go:10:15:10:41 | call to UserAgent | test.go:17:24:17:32 | untrusted | provenance | Src:MaD:794 | +| test.go:10:15:10:41 | call to UserAgent | test.go:18:15:18:23 | untrusted | provenance | Src:MaD:794 | +| test.go:10:15:10:41 | call to UserAgent | test.go:19:27:19:35 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:26:12:26:20 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:27:10:27:18 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:28:15:28:23 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:29:14:29:22 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:30:15:30:23 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:31:8:31:16 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:32:11:32:19 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:33:9:33:17 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:34:8:34:16 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:35:8:35:16 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:36:13:36:21 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:37:13:37:21 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:38:12:38:20 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:39:12:39:20 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:40:9:40:17 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:41:12:41:20 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:42:16:42:24 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:42:27:42:35 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:43:12:43:20 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:44:14:44:22 | untrusted | provenance | Src:MaD:794 | +| test.go:24:15:24:41 | call to UserAgent | test.go:44:25:44:33 | untrusted | provenance | Src:MaD:794 | +| test.go:48:15:48:41 | call to UserAgent | test.go:49:12:49:20 | untrusted | provenance | Src:MaD:794 | +| test.go:54:15:54:41 | call to UserAgent | test.go:56:31:56:39 | untrusted | provenance | Src:MaD:794 | +| test.go:60:15:60:41 | call to UserAgent | test.go:62:19:62:27 | untrusted | provenance | Src:MaD:794 | nodes | test.go:10:15:10:41 | call to UserAgent | semmle.label | call to UserAgent | | test.go:12:11:12:19 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected index d422436065c1..963d271c8b68 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected @@ -1,10 +1,10 @@ edges -| test.go:13:12:13:16 | selection of URL | test.go:13:12:13:21 | selection of Path | provenance | | +| test.go:13:12:13:16 | selection of URL | test.go:13:12:13:21 | selection of Path | provenance | Src:MaD:802 | | test.go:13:12:13:21 | selection of Path | test.go:21:18:21:23 | hidden | provenance | | | test.go:21:18:21:23 | hidden | test.go:21:11:21:24 | type conversion | provenance | | -| test.go:22:18:22:45 | call to URLParam | test.go:22:11:22:46 | type conversion | provenance | | -| test.go:23:18:23:60 | call to URLParamFromCtx | test.go:23:11:23:61 | type conversion | provenance | | -| test.go:24:18:24:71 | call to URLParam | test.go:24:11:24:72 | type conversion | provenance | | +| test.go:22:18:22:45 | call to URLParam | test.go:22:11:22:46 | type conversion | provenance | Src:MaD:408 | +| test.go:23:18:23:60 | call to URLParamFromCtx | test.go:23:11:23:61 | type conversion | provenance | Src:MaD:409 | +| test.go:24:18:24:71 | call to URLParam | test.go:24:11:24:72 | type conversion | provenance | Src:MaD:410 | nodes | test.go:13:12:13:16 | selection of URL | semmle.label | selection of URL | | test.go:13:12:13:21 | selection of Path | semmle.label | selection of Path | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected index c7fcf1625c7e..816efce0892f 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected @@ -1,10 +1,10 @@ edges -| test.go:172:11:172:32 | call to Param | test.go:173:20:173:24 | param | provenance | | -| test.go:178:11:178:32 | call to Param | test.go:182:24:182:28 | param | provenance | | +| test.go:172:11:172:32 | call to Param | test.go:173:20:173:24 | param | provenance | Src:MaD:464 | +| test.go:178:11:178:32 | call to Param | test.go:182:24:182:28 | param | provenance | Src:MaD:464 | | test.go:182:24:182:28 | param | test.go:182:20:182:28 | ...+... | provenance | Config | | test.go:190:9:190:26 | star expression | test.go:190:10:190:26 | selection of URL | provenance | Config | | test.go:190:9:190:26 | star expression | test.go:193:21:193:23 | url | provenance | | -| test.go:190:10:190:26 | selection of URL | test.go:190:9:190:26 | star expression | provenance | Config | +| test.go:190:10:190:26 | selection of URL | test.go:190:9:190:26 | star expression | provenance | Src:MaD:802 Config | | test.go:193:21:193:23 | url | test.go:193:21:193:32 | call to String | provenance | Config | nodes | test.go:172:11:172:32 | call to Param | semmle.label | call to Param | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected index ffb416f5824d..8ada23ef521b 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected @@ -1,36 +1,36 @@ edges -| test.go:15:11:15:32 | call to Param | test.go:16:16:16:20 | param | provenance | | -| test.go:21:11:21:27 | call to ParamValues | test.go:22:16:22:20 | param | provenance | | -| test.go:27:11:27:37 | call to QueryParam | test.go:28:16:28:20 | param | provenance | | -| test.go:33:11:33:27 | call to QueryParams | test.go:34:16:34:20 | param | provenance | | -| test.go:39:10:39:26 | call to QueryString | test.go:40:16:40:19 | qstr | provenance | | -| test.go:45:9:45:34 | call to FormValue | test.go:46:16:46:18 | val | provenance | | -| test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | provenance | | -| test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | provenance | | +| test.go:15:11:15:32 | call to Param | test.go:16:16:16:20 | param | provenance | Src:MaD:464 | +| test.go:21:11:21:27 | call to ParamValues | test.go:22:16:22:20 | param | provenance | Src:MaD:465 | +| test.go:27:11:27:37 | call to QueryParam | test.go:28:16:28:20 | param | provenance | Src:MaD:466 | +| test.go:33:11:33:27 | call to QueryParams | test.go:34:16:34:20 | param | provenance | Src:MaD:467 | +| test.go:39:10:39:26 | call to QueryString | test.go:40:16:40:19 | qstr | provenance | Src:MaD:468 | +| test.go:45:9:45:34 | call to FormValue | test.go:46:16:46:18 | val | provenance | Src:MaD:469 | +| test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | provenance | Src:MaD:470 | +| test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | provenance | Src:MaD:471 | | test.go:58:2:58:29 | ... := ...[0] | test.go:60:2:60:5 | file | provenance | | -| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | MaD:700 | +| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | MaD:747 | | test.go:59:2:59:7 | definition of buffer | test.go:61:20:61:25 | buffer | provenance | | -| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:626 | -| test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | provenance | | -| test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | provenance | | +| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:673 | +| test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | provenance | Src:MaD:472 | +| test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | provenance | Src:MaD:472 | | test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | provenance | | -| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | MaD:700 | +| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | MaD:747 | | test.go:75:2:75:7 | definition of buffer | test.go:77:20:77:25 | buffer | provenance | | -| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:626 | -| test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | provenance | | -| test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | provenance | | -| test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | provenance | | +| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:673 | +| test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | provenance | Src:MaD:473 | +| test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | provenance | Src:MaD:474 | +| test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | provenance | Src:MaD:463 | | test.go:112:17:112:19 | definition of ctx | test.go:114:16:114:18 | ctx | provenance | | -| test.go:113:21:113:42 | call to Param | test.go:112:17:112:19 | definition of ctx | provenance | MaD:431 | -| test.go:114:16:114:18 | ctx | test.go:114:16:114:33 | call to Get | provenance | MaD:430 | +| test.go:113:21:113:42 | call to Param | test.go:112:17:112:19 | definition of ctx | provenance | Src:MaD:464 MaD:462 | +| test.go:114:16:114:18 | ctx | test.go:114:16:114:33 | call to Get | provenance | MaD:461 | | test.go:114:16:114:33 | call to Get | test.go:114:16:114:42 | type assertion | provenance | | -| test.go:124:11:124:32 | call to Param | test.go:125:16:125:20 | param | provenance | | -| test.go:130:11:130:32 | call to Param | test.go:131:20:131:32 | type conversion | provenance | | -| test.go:136:11:136:32 | call to Param | test.go:137:29:137:41 | type conversion | provenance | | -| test.go:148:11:148:32 | call to Param | test.go:149:30:149:34 | param | provenance | | +| test.go:124:11:124:32 | call to Param | test.go:125:16:125:20 | param | provenance | Src:MaD:464 | +| test.go:130:11:130:32 | call to Param | test.go:131:20:131:32 | type conversion | provenance | Src:MaD:464 | +| test.go:136:11:136:32 | call to Param | test.go:137:29:137:41 | type conversion | provenance | Src:MaD:464 | +| test.go:148:11:148:32 | call to Param | test.go:149:30:149:34 | param | provenance | Src:MaD:464 | | test.go:149:12:149:35 | call to NewReader | test.go:150:31:150:36 | reader | provenance | | -| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | provenance | MaD:909 | -| test.go:164:11:164:32 | call to Param | test.go:165:23:165:35 | type conversion | provenance | | +| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | provenance | MaD:966 | +| test.go:164:11:164:32 | call to Param | test.go:165:23:165:35 | type conversion | provenance | Src:MaD:464 | nodes | test.go:15:11:15:32 | call to Param | semmle.label | call to Param | | test.go:16:16:16:20 | param | semmle.label | param | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected index 04bcfdedcb0c..31ee545b275c 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected @@ -1,6 +1,6 @@ edges -| test.go:221:15:221:38 | call to QueryParam | test.go:222:17:222:24 | filepath | provenance | | -| test.go:225:15:225:38 | call to QueryParam | test.go:226:23:226:30 | filepath | provenance | | +| test.go:221:15:221:38 | call to QueryParam | test.go:222:17:222:24 | filepath | provenance | Src:MaD:466 | +| test.go:225:15:225:38 | call to QueryParam | test.go:226:23:226:30 | filepath | provenance | Src:MaD:466 | nodes | test.go:221:15:221:38 | call to QueryParam | semmle.label | call to QueryParam | | test.go:222:17:222:24 | filepath | semmle.label | filepath | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected index 36dc9d014faa..39c52eb45303 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected @@ -4,13 +4,13 @@ edges | jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:31:21:31:34 | untrustedInput | provenance | | | jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:35:27:35:41 | untrustedString | provenance | | | jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:39:31:39:45 | untrustedString | provenance | | -| jsoniter.go:27:17:27:30 | untrustedInput | jsoniter.go:27:33:27:37 | &... | provenance | MaD:422 | +| jsoniter.go:27:17:27:30 | untrustedInput | jsoniter.go:27:33:27:37 | &... | provenance | MaD:453 | | jsoniter.go:27:33:27:37 | &... | jsoniter.go:28:15:28:24 | selection of field | provenance | | -| jsoniter.go:31:21:31:34 | untrustedInput | jsoniter.go:31:37:31:42 | &... | provenance | MaD:420 | +| jsoniter.go:31:21:31:34 | untrustedInput | jsoniter.go:31:37:31:42 | &... | provenance | MaD:451 | | jsoniter.go:31:37:31:42 | &... | jsoniter.go:32:15:32:25 | selection of field | provenance | | -| jsoniter.go:35:27:35:41 | untrustedString | jsoniter.go:35:44:35:49 | &... | provenance | MaD:423 | +| jsoniter.go:35:27:35:41 | untrustedString | jsoniter.go:35:44:35:49 | &... | provenance | MaD:454 | | jsoniter.go:35:44:35:49 | &... | jsoniter.go:36:15:36:25 | selection of field | provenance | | -| jsoniter.go:39:31:39:45 | untrustedString | jsoniter.go:39:48:39:53 | &... | provenance | MaD:421 | +| jsoniter.go:39:31:39:45 | untrustedString | jsoniter.go:39:48:39:53 | &... | provenance | MaD:452 | | jsoniter.go:39:48:39:53 | &... | jsoniter.go:40:15:40:25 | selection of field | provenance | | nodes | jsoniter.go:23:20:23:38 | call to getUntrustedBytes | semmle.label | call to getUntrustedBytes | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.ql b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.ql index 1d761c2a6795..d55ef5b31d81 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.ql @@ -9,7 +9,7 @@ class UntrustedFunction extends Function { } class RemoteSource extends DataFlow::Node, RemoteFlowSource::Range { - RemoteSource() { this = any(UntrustedFunction f).getACall() } + RemoteSource() { this = any(UntrustedFunction f).getACall().getResult() } } from CommandInjection::Flow::PathNode source, CommandInjection::Flow::PathNode sink diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Fasthttp/fasthttp.go b/go/ql/test/library-tests/semmle/go/frameworks/Fasthttp/fasthttp.go index e6862993f979..c25c9d010588 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Fasthttp/fasthttp.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/Fasthttp/fasthttp.go @@ -169,10 +169,10 @@ func fasthttpServer() { fmt.Println(body1, body2, body3, body4) requestCtx.Request.BodyStream() // $ RemoteFlowSource="call to BodyStream" - requestCtx.Request.ReadBody(dstReader, 100, 1000) // $ RemoteFlowSource="dstReader" - requestCtx.Request.ReadLimitBody(dstReader, 100) // $ RemoteFlowSource="dstReader" - requestCtx.Request.ContinueReadBodyStream(dstReader, 100, true) // $ RemoteFlowSource="dstReader" - requestCtx.Request.ContinueReadBody(dstReader, 100) // $ RemoteFlowSource="dstReader" + requestCtx.Request.ReadBody(&bufio.Reader{}, 100, 1000) // $ RemoteFlowSource="&..." + requestCtx.Request.ReadLimitBody(&bufio.Reader{}, 100) // $ RemoteFlowSource="&..." + requestCtx.Request.ContinueReadBodyStream(&bufio.Reader{}, 100, true) // $ RemoteFlowSource="&..." + requestCtx.Request.ContinueReadBody(&bufio.Reader{}, 100) // $ RemoteFlowSource="&..." // Response methods // Xss Sinks Related method diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected index 45d417ca8128..0a11cd3a5074 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected @@ -1,8 +1,8 @@ edges -| Gin.go:24:15:24:33 | call to Query | Gin.go:25:10:25:17 | filepath | provenance | | -| Gin.go:24:15:24:33 | call to Query | Gin.go:26:39:26:46 | filepath | provenance | | -| Gin.go:24:15:24:33 | call to Query | Gin.go:27:20:27:27 | filepath | provenance | | -| Gin.go:24:15:24:33 | call to Query | Gin.go:29:32:29:39 | filepath | provenance | | +| Gin.go:24:15:24:33 | call to Query | Gin.go:25:10:25:17 | filepath | provenance | Src:MaD:396 | +| Gin.go:24:15:24:33 | call to Query | Gin.go:26:39:26:46 | filepath | provenance | Src:MaD:396 | +| Gin.go:24:15:24:33 | call to Query | Gin.go:27:20:27:27 | filepath | provenance | Src:MaD:396 | +| Gin.go:24:15:24:33 | call to Query | Gin.go:29:32:29:39 | filepath | provenance | Src:MaD:396 | nodes | Gin.go:24:15:24:33 | call to Query | semmle.label | call to Query | | Gin.go:25:10:25:17 | filepath | semmle.label | filepath | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected index 91b511d1cc64..dbfd0a240a2b 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected @@ -1,18 +1,18 @@ invalidModelRow edges -| gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | provenance | | -| gorestful.go:17:12:17:39 | call to BodyParameter | gorestful.go:18:15:18:17 | val | provenance | | -| gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | provenance | | -| gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | provenance | | -| gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | provenance | | -| gorestful_v2.go:17:12:17:39 | call to BodyParameter | gorestful_v2.go:18:15:18:17 | val | provenance | | -| gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | provenance | | -| gorestful_v2.go:23:21:23:24 | &... | gorestful_v2.go:24:15:24:21 | selection of cmd | provenance | | +| gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | provenance | Src:MaD:339 | +| gorestful.go:17:2:17:39 | ... := ...[0] | gorestful.go:18:15:18:17 | val | provenance | Src:MaD:341 | +| gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | provenance | Src:MaD:344 | +| gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | provenance | Src:MaD:345 | +| gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | provenance | Src:MaD:339 | +| gorestful_v2.go:17:2:17:39 | ... := ...[0] | gorestful_v2.go:18:15:18:17 | val | provenance | Src:MaD:341 | +| gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | provenance | Src:MaD:344 | +| gorestful_v2.go:23:21:23:24 | &... | gorestful_v2.go:24:15:24:21 | selection of cmd | provenance | Src:MaD:345 | nodes | gorestful.go:15:15:15:44 | call to QueryParameters | semmle.label | call to QueryParameters | | gorestful.go:15:15:15:47 | index expression | semmle.label | index expression | | gorestful.go:16:15:16:43 | call to QueryParameter | semmle.label | call to QueryParameter | -| gorestful.go:17:12:17:39 | call to BodyParameter | semmle.label | call to BodyParameter | +| gorestful.go:17:2:17:39 | ... := ...[0] | semmle.label | ... := ...[0] | | gorestful.go:18:15:18:17 | val | semmle.label | val | | gorestful.go:19:15:19:44 | call to HeaderParameter | semmle.label | call to HeaderParameter | | gorestful.go:20:15:20:42 | call to PathParameter | semmle.label | call to PathParameter | @@ -23,7 +23,7 @@ nodes | gorestful_v2.go:15:15:15:44 | call to QueryParameters | semmle.label | call to QueryParameters | | gorestful_v2.go:15:15:15:47 | index expression | semmle.label | index expression | | gorestful_v2.go:16:15:16:43 | call to QueryParameter | semmle.label | call to QueryParameter | -| gorestful_v2.go:17:12:17:39 | call to BodyParameter | semmle.label | call to BodyParameter | +| gorestful_v2.go:17:2:17:39 | ... := ...[0] | semmle.label | ... := ...[0] | | gorestful_v2.go:18:15:18:17 | val | semmle.label | val | | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | semmle.label | call to HeaderParameter | | gorestful_v2.go:20:15:20:42 | call to PathParameter | semmle.label | call to PathParameter | @@ -35,14 +35,14 @@ subpaths #select | gorestful.go:15:15:15:47 | index expression | gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | This command depends on $@. | gorestful.go:15:15:15:44 | call to QueryParameters | a user-provided value | | gorestful.go:16:15:16:43 | call to QueryParameter | gorestful.go:16:15:16:43 | call to QueryParameter | gorestful.go:16:15:16:43 | call to QueryParameter | This command depends on $@. | gorestful.go:16:15:16:43 | call to QueryParameter | a user-provided value | -| gorestful.go:18:15:18:17 | val | gorestful.go:17:12:17:39 | call to BodyParameter | gorestful.go:18:15:18:17 | val | This command depends on $@. | gorestful.go:17:12:17:39 | call to BodyParameter | a user-provided value | +| gorestful.go:18:15:18:17 | val | gorestful.go:17:2:17:39 | ... := ...[0] | gorestful.go:18:15:18:17 | val | This command depends on $@. | gorestful.go:17:2:17:39 | ... := ...[0] | a user-provided value | | gorestful.go:19:15:19:44 | call to HeaderParameter | gorestful.go:19:15:19:44 | call to HeaderParameter | gorestful.go:19:15:19:44 | call to HeaderParameter | This command depends on $@. | gorestful.go:19:15:19:44 | call to HeaderParameter | a user-provided value | | gorestful.go:20:15:20:42 | call to PathParameter | gorestful.go:20:15:20:42 | call to PathParameter | gorestful.go:20:15:20:42 | call to PathParameter | This command depends on $@. | gorestful.go:20:15:20:42 | call to PathParameter | a user-provided value | | gorestful.go:21:15:21:45 | index expression | gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | This command depends on $@. | gorestful.go:21:15:21:38 | call to PathParameters | a user-provided value | | gorestful.go:24:15:24:21 | selection of cmd | gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | This command depends on $@. | gorestful.go:23:21:23:24 | &... | a user-provided value | | gorestful_v2.go:15:15:15:47 | index expression | gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | This command depends on $@. | gorestful_v2.go:15:15:15:44 | call to QueryParameters | a user-provided value | | gorestful_v2.go:16:15:16:43 | call to QueryParameter | gorestful_v2.go:16:15:16:43 | call to QueryParameter | gorestful_v2.go:16:15:16:43 | call to QueryParameter | This command depends on $@. | gorestful_v2.go:16:15:16:43 | call to QueryParameter | a user-provided value | -| gorestful_v2.go:18:15:18:17 | val | gorestful_v2.go:17:12:17:39 | call to BodyParameter | gorestful_v2.go:18:15:18:17 | val | This command depends on $@. | gorestful_v2.go:17:12:17:39 | call to BodyParameter | a user-provided value | +| gorestful_v2.go:18:15:18:17 | val | gorestful_v2.go:17:2:17:39 | ... := ...[0] | gorestful_v2.go:18:15:18:17 | val | This command depends on $@. | gorestful_v2.go:17:2:17:39 | ... := ...[0] | a user-provided value | | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | This command depends on $@. | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | a user-provided value | | gorestful_v2.go:20:15:20:42 | call to PathParameter | gorestful_v2.go:20:15:20:42 | call to PathParameter | gorestful_v2.go:20:15:20:42 | call to PathParameter | This command depends on $@. | gorestful_v2.go:20:15:20:42 | call to PathParameter | a user-provided value | | gorestful_v2.go:21:15:21:45 | index expression | gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | This command depends on $@. | gorestful_v2.go:21:15:21:38 | call to PathParameters | a user-provided value | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected index 749556701f34..bc8d19ba666d 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected @@ -1,8 +1,8 @@ edges | EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:27 | selection of Params | provenance | Config | | EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:32 | selection of Form | provenance | Config | -| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit dereference | provenance | Config | -| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | provenance | Config | +| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit dereference | provenance | Src:MaD:482 Config | +| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | provenance | Src:MaD:482 Config | | EndToEnd.go:94:20:94:32 | selection of Form | EndToEnd.go:94:20:94:49 | call to Get | provenance | Config | nodes | EndToEnd.go:94:20:94:27 | implicit dereference | semmle.label | implicit dereference | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected index 1ebdd0f3afb0..3d58541bee20 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected @@ -1,13 +1,13 @@ edges | EndToEnd.go:35:2:35:4 | definition of buf | EndToEnd.go:37:24:37:26 | buf | provenance | | -| EndToEnd.go:36:18:36:25 | selection of Params | EndToEnd.go:36:18:36:30 | selection of Form | provenance | | -| EndToEnd.go:36:18:36:30 | selection of Form | EndToEnd.go:36:18:36:47 | call to Get | provenance | MaD:815 | -| EndToEnd.go:36:18:36:47 | call to Get | EndToEnd.go:35:2:35:4 | definition of buf | provenance | MaD:629 | -| EndToEnd.go:69:22:69:29 | selection of Params | EndToEnd.go:69:22:69:34 | selection of Form | provenance | | -| EndToEnd.go:69:22:69:34 | selection of Form | EndToEnd.go:69:22:69:51 | call to Get | provenance | MaD:815 | -| Revel.go:70:22:70:29 | selection of Params | Revel.go:70:22:70:35 | selection of Query | provenance | | -| examples/booking/app/init.go:36:44:36:48 | selection of URL | examples/booking/app/init.go:36:44:36:53 | selection of Path | provenance | | -| examples/booking/app/init.go:40:49:40:53 | selection of URL | examples/booking/app/init.go:40:49:40:58 | selection of Path | provenance | | +| EndToEnd.go:36:18:36:25 | selection of Params | EndToEnd.go:36:18:36:30 | selection of Form | provenance | Src:MaD:482 | +| EndToEnd.go:36:18:36:30 | selection of Form | EndToEnd.go:36:18:36:47 | call to Get | provenance | MaD:870 | +| EndToEnd.go:36:18:36:47 | call to Get | EndToEnd.go:35:2:35:4 | definition of buf | provenance | MaD:676 | +| EndToEnd.go:69:22:69:29 | selection of Params | EndToEnd.go:69:22:69:34 | selection of Form | provenance | Src:MaD:482 | +| EndToEnd.go:69:22:69:34 | selection of Form | EndToEnd.go:69:22:69:51 | call to Get | provenance | MaD:870 | +| Revel.go:70:22:70:29 | selection of Params | Revel.go:70:22:70:35 | selection of Query | provenance | Src:MaD:482 | +| examples/booking/app/init.go:36:44:36:48 | selection of URL | examples/booking/app/init.go:36:44:36:53 | selection of Path | provenance | Src:MaD:802 | +| examples/booking/app/init.go:40:49:40:53 | selection of URL | examples/booking/app/init.go:40:49:40:58 | selection of Path | provenance | Src:MaD:802 | nodes | EndToEnd.go:35:2:35:4 | definition of buf | semmle.label | definition of buf | | EndToEnd.go:36:18:36:25 | selection of Params | semmle.label | selection of Params | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected index 20f6a5bf62a6..d5ca93960155 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected @@ -1,8 +1,8 @@ edges -| EndToEnd.go:58:18:58:25 | selection of Params | EndToEnd.go:58:18:58:30 | selection of Form | provenance | | -| EndToEnd.go:58:18:58:30 | selection of Form | EndToEnd.go:58:18:58:47 | call to Get | provenance | MaD:815 | -| EndToEnd.go:64:26:64:33 | selection of Params | EndToEnd.go:64:26:64:38 | selection of Form | provenance | | -| EndToEnd.go:64:26:64:38 | selection of Form | EndToEnd.go:64:26:64:55 | call to Get | provenance | MaD:815 | +| EndToEnd.go:58:18:58:25 | selection of Params | EndToEnd.go:58:18:58:30 | selection of Form | provenance | Src:MaD:482 | +| EndToEnd.go:58:18:58:30 | selection of Form | EndToEnd.go:58:18:58:47 | call to Get | provenance | MaD:870 | +| EndToEnd.go:64:26:64:33 | selection of Params | EndToEnd.go:64:26:64:38 | selection of Form | provenance | Src:MaD:482 | +| EndToEnd.go:64:26:64:38 | selection of Form | EndToEnd.go:64:26:64:55 | call to Get | provenance | MaD:870 | nodes | EndToEnd.go:58:18:58:25 | selection of Params | semmle.label | selection of Params | | EndToEnd.go:58:18:58:30 | selection of Form | semmle.label | selection of Form | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected index d8d22b59dac9..4b0749e3224b 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected @@ -6,9 +6,9 @@ edges | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | provenance | | | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | rpc/notes/service.twirp.go:544:27:544:29 | buf | provenance | | -| rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | provenance | MaD:620 | +| rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | provenance | Src:MaD:795 MaD:667 | | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | -| rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | provenance | MaD:505 | +| rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | provenance | MaD:611 | | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | provenance | | | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | provenance | | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.expected b/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.expected new file mode 100644 index 000000000000..0124cf73218f --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.expected @@ -0,0 +1,9 @@ +| WebSocketReadWrite.go:27:9:27:16 | selection of Header | +| WebSocketReadWrite.go:31:7:31:10 | definition of xnet | +| WebSocketReadWrite.go:35:3:35:7 | definition of xnet2 | +| WebSocketReadWrite.go:41:3:41:40 | ... := ...[1] | +| WebSocketReadWrite.go:44:3:44:48 | ... := ...[1] | +| WebSocketReadWrite.go:51:7:51:16 | definition of gorillaMsg | +| WebSocketReadWrite.go:55:3:55:10 | definition of gorilla2 | +| WebSocketReadWrite.go:61:3:61:38 | ... := ...[1] | +| WebSocketReadWrite.go:67:3:67:36 | ... := ...[0] | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.ql b/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.ql new file mode 100644 index 000000000000..9e68fd210ff2 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.ql @@ -0,0 +1,3 @@ +import go + +select any(RemoteFlowSource rfs) diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected index 165d6f040cd5..c74109cd3a0e 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected @@ -1,40 +1,40 @@ edges -| test.go:12:12:12:22 | selection of URL | test.go:12:12:12:30 | call to Query | provenance | MaD:808 | -| test.go:12:12:12:30 | call to Query | test.go:12:12:12:44 | call to Get | provenance | MaD:815 | +| test.go:12:12:12:22 | selection of URL | test.go:12:12:12:30 | call to Query | provenance | Src:MaD:802 MaD:863 | +| test.go:12:12:12:30 | call to Query | test.go:12:12:12:44 | call to Get | provenance | MaD:870 | | test.go:12:12:12:44 | call to Get | test.go:15:42:15:47 | param1 | provenance | | | test.go:15:22:15:48 | call to UnescapeString | test.go:15:15:15:49 | type conversion | provenance | | -| test.go:15:42:15:47 | param1 | test.go:15:22:15:48 | call to UnescapeString | provenance | MaD:487 | +| test.go:15:42:15:47 | param1 | test.go:15:22:15:48 | call to UnescapeString | provenance | MaD:595 | | test.go:17:2:17:36 | ... := ...[0] | test.go:18:15:18:31 | type conversion | provenance | | | test.go:17:2:17:36 | ... := ...[0] | test.go:29:22:29:25 | node | provenance | | -| test.go:17:24:17:35 | selection of Body | test.go:17:2:17:36 | ... := ...[0] | provenance | MaD:482 | +| test.go:17:24:17:35 | selection of Body | test.go:17:2:17:36 | ... := ...[0] | provenance | Src:MaD:795 MaD:590 | | test.go:20:2:20:48 | ... := ...[0] | test.go:21:15:21:32 | type conversion | provenance | | -| test.go:20:36:20:47 | selection of Body | test.go:20:2:20:48 | ... := ...[0] | provenance | MaD:485 | +| test.go:20:36:20:47 | selection of Body | test.go:20:2:20:48 | ... := ...[0] | provenance | Src:MaD:795 MaD:593 | | test.go:23:2:23:50 | ... := ...[0] | test.go:24:15:24:35 | type conversion | provenance | | -| test.go:23:33:23:44 | selection of Body | test.go:23:2:23:50 | ... := ...[0] | provenance | MaD:483 | +| test.go:23:33:23:44 | selection of Body | test.go:23:2:23:50 | ... := ...[0] | provenance | Src:MaD:795 MaD:591 | | test.go:26:2:26:62 | ... := ...[0] | test.go:27:15:27:36 | type conversion | provenance | | -| test.go:26:45:26:56 | selection of Body | test.go:26:2:26:62 | ... := ...[0] | provenance | MaD:484 | +| test.go:26:45:26:56 | selection of Body | test.go:26:2:26:62 | ... := ...[0] | provenance | Src:MaD:795 MaD:592 | | test.go:31:15:31:45 | call to NewTokenizer | test.go:32:15:32:23 | tokenizer | provenance | | | test.go:31:15:31:45 | call to NewTokenizer | test.go:33:15:33:23 | tokenizer | provenance | | | test.go:31:15:31:45 | call to NewTokenizer | test.go:34:17:34:25 | tokenizer | provenance | | | test.go:31:15:31:45 | call to NewTokenizer | test.go:36:15:36:23 | tokenizer | provenance | | | test.go:31:15:31:45 | call to NewTokenizer | test.go:37:22:37:30 | tokenizer | provenance | | -| test.go:31:33:31:44 | selection of Body | test.go:31:15:31:45 | call to NewTokenizer | provenance | MaD:480 | -| test.go:32:15:32:23 | tokenizer | test.go:32:15:32:34 | call to Buffered | provenance | MaD:490 | -| test.go:33:15:33:23 | tokenizer | test.go:33:15:33:29 | call to Raw | provenance | MaD:491 | +| test.go:31:33:31:44 | selection of Body | test.go:31:15:31:45 | call to NewTokenizer | provenance | Src:MaD:795 MaD:588 | +| test.go:32:15:32:23 | tokenizer | test.go:32:15:32:34 | call to Buffered | provenance | MaD:598 | +| test.go:33:15:33:23 | tokenizer | test.go:33:15:33:29 | call to Raw | provenance | MaD:599 | | test.go:34:2:34:35 | ... := ...[1] | test.go:35:15:35:19 | value | provenance | | -| test.go:34:17:34:25 | tokenizer | test.go:34:2:34:35 | ... := ...[1] | provenance | MaD:492 | -| test.go:36:15:36:23 | tokenizer | test.go:36:15:36:30 | call to Text | provenance | MaD:493 | -| test.go:37:22:37:30 | tokenizer | test.go:37:22:37:38 | call to Token | provenance | MaD:494 | +| test.go:34:17:34:25 | tokenizer | test.go:34:2:34:35 | ... := ...[1] | provenance | MaD:600 | +| test.go:36:15:36:23 | tokenizer | test.go:36:15:36:30 | call to Text | provenance | MaD:601 | +| test.go:37:22:37:30 | tokenizer | test.go:37:22:37:38 | call to Token | provenance | MaD:602 | | test.go:37:22:37:38 | call to Token | test.go:37:15:37:44 | type conversion | provenance | | | test.go:39:23:39:77 | call to NewTokenizerFragment | test.go:40:15:40:31 | tokenizerFragment | provenance | | -| test.go:39:49:39:60 | selection of Body | test.go:39:23:39:77 | call to NewTokenizerFragment | provenance | MaD:481 | -| test.go:40:15:40:31 | tokenizerFragment | test.go:40:15:40:42 | call to Buffered | provenance | MaD:490 | +| test.go:39:49:39:60 | selection of Body | test.go:39:23:39:77 | call to NewTokenizerFragment | provenance | Src:MaD:795 MaD:589 | +| test.go:40:15:40:31 | tokenizerFragment | test.go:40:15:40:42 | call to Buffered | provenance | MaD:598 | | test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | provenance | | | test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | provenance | | | test.go:42:6:42:14 | definition of cleanNode | test.go:45:23:45:31 | cleanNode | provenance | | | test.go:43:2:43:43 | ... := ...[0] | test.go:44:24:44:34 | taintedNode | provenance | | -| test.go:43:31:43:42 | selection of Body | test.go:43:2:43:43 | ... := ...[0] | provenance | MaD:482 | -| test.go:44:24:44:34 | taintedNode | test.go:42:6:42:14 | definition of cleanNode | provenance | MaD:488 | +| test.go:43:31:43:42 | selection of Body | test.go:43:2:43:43 | ... := ...[0] | provenance | Src:MaD:795 MaD:590 | +| test.go:44:24:44:34 | taintedNode | test.go:42:6:42:14 | definition of cleanNode | provenance | MaD:596 | | test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | provenance | | | test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | provenance | | | test.go:45:22:45:31 | &... | test.go:45:23:45:31 | cleanNode | provenance | | @@ -46,8 +46,8 @@ edges | test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | provenance | | | test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:23:50:32 | cleanNode2 | provenance | | | test.go:48:2:48:44 | ... := ...[0] | test.go:49:26:49:37 | taintedNode2 | provenance | | -| test.go:48:32:48:43 | selection of Body | test.go:48:2:48:44 | ... := ...[0] | provenance | MaD:482 | -| test.go:49:26:49:37 | taintedNode2 | test.go:47:6:47:15 | definition of cleanNode2 | provenance | MaD:489 | +| test.go:48:32:48:43 | selection of Body | test.go:48:2:48:44 | ... := ...[0] | provenance | Src:MaD:795 MaD:590 | +| test.go:49:26:49:37 | taintedNode2 | test.go:47:6:47:15 | definition of cleanNode2 | provenance | MaD:597 | | test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | provenance | | | test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | provenance | | | test.go:50:22:50:32 | &... | test.go:50:23:50:32 | cleanNode2 | provenance | | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected index 76d7f0dd9317..d68255c95813 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected @@ -1,6 +1,6 @@ edges -| test.go:56:2:56:42 | ... := ...[0] | test.go:57:29:57:40 | selection of Value | provenance | Src:MaD:740 | -| test.go:57:29:57:40 | selection of Value | test.go:57:11:57:41 | call to EscapeString | provenance | MaD:479 | +| test.go:56:2:56:42 | ... := ...[0] | test.go:57:29:57:40 | selection of Value | provenance | Src:MaD:787 | +| test.go:57:29:57:40 | selection of Value | test.go:57:11:57:41 | call to EscapeString | provenance | MaD:587 | nodes | test.go:56:2:56:42 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:57:11:57:41 | call to EscapeString | semmle.label | call to EscapeString | diff --git a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected index 60b613402bf5..72d303a5545f 100644 --- a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected +++ b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected @@ -1,13 +1,14 @@ models -| 1 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | -| 2 | Summary: path; ; false; Clean; ; ; Argument[0]; ReturnValue; taint; manual | +| 1 | Source: net/http; Request; true; URL; ; ; ; remote; manual | +| 2 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 3 | Summary: path; ; false; Clean; ; ; Argument[0]; ReturnValue; taint; manual | edges -| TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:14:18:14:30 | call to Query | provenance | MaD:1 | +| TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:14:18:14:30 | call to Query | provenance | Src:MaD:1 MaD:2 | | TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:17:29:17:40 | tainted_path | provenance | | | TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:21:57:21:68 | tainted_path | provenance | | | TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:68:39:68:56 | ...+... | provenance | | | TaintedPath.go:21:57:21:68 | tainted_path | TaintedPath.go:21:28:21:69 | call to Join | provenance | FunctionModel | -| TaintedPath.go:68:39:68:56 | ...+... | TaintedPath.go:68:28:68:57 | call to Clean | provenance | MaD:2 | +| TaintedPath.go:68:39:68:56 | ...+... | TaintedPath.go:68:28:68:57 | call to Clean | provenance | MaD:3 | nodes | TaintedPath.go:14:18:14:22 | selection of URL | semmle.label | selection of URL | | TaintedPath.go:14:18:14:30 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected index 4112a9094927..8ecda9edce7d 100644 --- a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected +++ b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected @@ -7,9 +7,9 @@ edges | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | provenance | | | ZipSlip.go:11:2:15:2 | range statement[1] | ZipSlip.go:12:24:12:29 | selection of Name | provenance | | | ZipSlip.go:12:3:12:30 | ... := ...[0] | ZipSlip.go:14:20:14:20 | p | provenance | | -| ZipSlip.go:12:24:12:29 | selection of Name | ZipSlip.go:12:3:12:30 | ... := ...[0] | provenance | MaD:820 | +| ZipSlip.go:12:24:12:29 | selection of Name | ZipSlip.go:12:3:12:30 | ... := ...[0] | provenance | MaD:877 | | tarslip.go:15:2:15:30 | ... := ...[0] | tarslip.go:16:23:16:33 | selection of Name | provenance | | -| tarslip.go:16:23:16:33 | selection of Name | tarslip.go:16:14:16:34 | call to Dir | provenance | MaD:835 | +| tarslip.go:16:23:16:33 | selection of Name | tarslip.go:16:14:16:34 | call to Dir | provenance | MaD:892 | | tst.go:23:2:43:2 | range statement[1] | tst.go:29:20:29:23 | path | provenance | | nodes | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | semmle.label | definition of candidate | diff --git a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected index 6d399f758a3e..0071cfbdddd7 100644 --- a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected @@ -1,27 +1,27 @@ edges -| ArgumentInjection.go:9:10:9:16 | selection of URL | ArgumentInjection.go:9:10:9:24 | call to Query | provenance | MaD:808 | +| ArgumentInjection.go:9:10:9:16 | selection of URL | ArgumentInjection.go:9:10:9:24 | call to Query | provenance | Src:MaD:802 MaD:863 | | ArgumentInjection.go:9:10:9:24 | call to Query | ArgumentInjection.go:10:31:10:34 | path | provenance | | -| CommandInjection2.go:13:15:13:21 | selection of URL | CommandInjection2.go:13:15:13:29 | call to Query | provenance | MaD:808 | +| CommandInjection2.go:13:15:13:21 | selection of URL | CommandInjection2.go:13:15:13:29 | call to Query | provenance | Src:MaD:802 MaD:863 | | CommandInjection2.go:13:15:13:29 | call to Query | CommandInjection2.go:15:67:15:75 | imageName | provenance | | | CommandInjection2.go:15:34:15:88 | []type{args} [array] | CommandInjection2.go:15:34:15:88 | call to Sprintf | provenance | MaD:248 | | CommandInjection2.go:15:67:15:75 | imageName | CommandInjection2.go:15:34:15:88 | []type{args} [array] | provenance | | | CommandInjection2.go:15:67:15:75 | imageName | CommandInjection2.go:15:34:15:88 | call to Sprintf | provenance | FunctionModel | -| CommandInjection2.go:41:15:41:21 | selection of URL | CommandInjection2.go:41:15:41:29 | call to Query | provenance | MaD:808 | +| CommandInjection2.go:41:15:41:21 | selection of URL | CommandInjection2.go:41:15:41:29 | call to Query | provenance | Src:MaD:802 MaD:863 | | CommandInjection2.go:41:15:41:29 | call to Query | CommandInjection2.go:44:67:44:75 | imageName | provenance | | | CommandInjection2.go:44:34:44:88 | []type{args} [array] | CommandInjection2.go:44:34:44:88 | call to Sprintf | provenance | MaD:248 | | CommandInjection2.go:44:67:44:75 | imageName | CommandInjection2.go:44:34:44:88 | []type{args} [array] | provenance | | | CommandInjection2.go:44:67:44:75 | imageName | CommandInjection2.go:44:34:44:88 | call to Sprintf | provenance | FunctionModel | -| CommandInjection.go:9:13:9:19 | selection of URL | CommandInjection.go:9:13:9:27 | call to Query | provenance | MaD:808 | +| CommandInjection.go:9:13:9:19 | selection of URL | CommandInjection.go:9:13:9:27 | call to Query | provenance | Src:MaD:802 MaD:863 | | CommandInjection.go:9:13:9:27 | call to Query | CommandInjection.go:10:22:10:28 | cmdName | provenance | | -| GitSubcommands.go:11:13:11:19 | selection of URL | GitSubcommands.go:11:13:11:27 | call to Query | provenance | MaD:808 | +| GitSubcommands.go:11:13:11:19 | selection of URL | GitSubcommands.go:11:13:11:27 | call to Query | provenance | Src:MaD:802 MaD:863 | | GitSubcommands.go:11:13:11:27 | call to Query | GitSubcommands.go:13:31:13:37 | tainted | provenance | | | GitSubcommands.go:11:13:11:27 | call to Query | GitSubcommands.go:14:31:14:37 | tainted | provenance | | | GitSubcommands.go:11:13:11:27 | call to Query | GitSubcommands.go:15:30:15:36 | tainted | provenance | | | GitSubcommands.go:11:13:11:27 | call to Query | GitSubcommands.go:16:35:16:41 | tainted | provenance | | | GitSubcommands.go:11:13:11:27 | call to Query | GitSubcommands.go:17:36:17:42 | tainted | provenance | | -| GitSubcommands.go:33:13:33:19 | selection of URL | GitSubcommands.go:33:13:33:27 | call to Query | provenance | MaD:808 | +| GitSubcommands.go:33:13:33:19 | selection of URL | GitSubcommands.go:33:13:33:27 | call to Query | provenance | Src:MaD:802 MaD:863 | | GitSubcommands.go:33:13:33:27 | call to Query | GitSubcommands.go:38:32:38:38 | tainted | provenance | | -| SanitizingDoubleDash.go:9:13:9:19 | selection of URL | SanitizingDoubleDash.go:9:13:9:27 | call to Query | provenance | MaD:808 | +| SanitizingDoubleDash.go:9:13:9:19 | selection of URL | SanitizingDoubleDash.go:9:13:9:27 | call to Query | provenance | Src:MaD:802 MaD:863 | | SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:13:25:13:31 | tainted | provenance | | | SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:14:23:14:33 | slice expression | provenance | | | SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:39:31:39:37 | tainted | provenance | | @@ -56,7 +56,7 @@ edges | SanitizingDoubleDash.go:69:21:69:28 | arrayLit | SanitizingDoubleDash.go:69:14:69:35 | call to append | provenance | MaD:28 | | SanitizingDoubleDash.go:69:21:69:28 | arrayLit [array] | SanitizingDoubleDash.go:69:14:69:35 | call to append | provenance | MaD:29 | | SanitizingDoubleDash.go:69:21:69:28 | arrayLit [array] | SanitizingDoubleDash.go:69:14:69:35 | call to append [array] | provenance | MaD:29 | -| SanitizingDoubleDash.go:92:13:92:19 | selection of URL | SanitizingDoubleDash.go:92:13:92:27 | call to Query | provenance | MaD:808 | +| SanitizingDoubleDash.go:92:13:92:19 | selection of URL | SanitizingDoubleDash.go:92:13:92:27 | call to Query | provenance | Src:MaD:802 MaD:863 | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:95:25:95:31 | tainted | provenance | | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:96:24:96:34 | slice expression | provenance | | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:100:31:100:37 | tainted | provenance | | diff --git a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected index 13a97e6e7735..a8e50184fb05 100644 --- a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected @@ -1,18 +1,18 @@ edges -| ReflectedXss.go:11:15:11:20 | selection of Form | ReflectedXss.go:11:15:11:36 | call to Get | provenance | MaD:815 | +| ReflectedXss.go:11:15:11:20 | selection of Form | ReflectedXss.go:11:15:11:36 | call to Get | provenance | Src:MaD:797 MaD:870 | | ReflectedXss.go:11:15:11:36 | call to Get | ReflectedXss.go:14:44:14:51 | username | provenance | | -| contenttype.go:11:11:11:16 | selection of Form | contenttype.go:11:11:11:28 | call to Get | provenance | MaD:815 | +| contenttype.go:11:11:11:16 | selection of Form | contenttype.go:11:11:11:28 | call to Get | provenance | Src:MaD:797 MaD:870 | | contenttype.go:11:11:11:28 | call to Get | contenttype.go:17:11:17:22 | type conversion | provenance | | -| contenttype.go:49:11:49:16 | selection of Form | contenttype.go:49:11:49:28 | call to Get | provenance | MaD:815 | +| contenttype.go:49:11:49:16 | selection of Form | contenttype.go:49:11:49:28 | call to Get | provenance | Src:MaD:797 MaD:870 | | contenttype.go:49:11:49:28 | call to Get | contenttype.go:53:34:53:37 | data | provenance | | -| contenttype.go:63:10:63:28 | call to FormValue | contenttype.go:64:52:64:55 | data | provenance | Src:MaD:743 | -| contenttype.go:73:10:73:28 | call to FormValue | contenttype.go:79:11:79:14 | data | provenance | Src:MaD:743 | -| contenttype.go:88:10:88:28 | call to FormValue | contenttype.go:91:4:91:7 | data | provenance | Src:MaD:743 | -| contenttype.go:113:10:113:28 | call to FormValue | contenttype.go:114:50:114:53 | data | provenance | Src:MaD:743 | -| reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:34:32:37 | file | provenance | Src:MaD:742 | -| reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:46:34:60 | selection of Filename | provenance | Src:MaD:742 | +| contenttype.go:63:10:63:28 | call to FormValue | contenttype.go:64:52:64:55 | data | provenance | Src:MaD:790 | +| contenttype.go:73:10:73:28 | call to FormValue | contenttype.go:79:11:79:14 | data | provenance | Src:MaD:790 | +| contenttype.go:88:10:88:28 | call to FormValue | contenttype.go:91:4:91:7 | data | provenance | Src:MaD:790 | +| contenttype.go:113:10:113:28 | call to FormValue | contenttype.go:114:50:114:53 | data | provenance | Src:MaD:790 | +| reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:34:32:37 | file | provenance | Src:MaD:789 | +| reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:46:34:60 | selection of Filename | provenance | Src:MaD:789 | | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | reflectedxsstest.go:33:49:33:55 | content | provenance | | -| reflectedxsstest.go:32:34:32:37 | file | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | provenance | MaD:613 | +| reflectedxsstest.go:32:34:32:37 | file | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | provenance | MaD:660 | | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | reflectedxsstest.go:33:17:33:56 | call to Sprintf | provenance | MaD:248 | | reflectedxsstest.go:33:17:33:56 | call to Sprintf | reflectedxsstest.go:33:10:33:57 | type conversion | provenance | | | reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | provenance | | @@ -21,32 +21,32 @@ edges | reflectedxsstest.go:34:17:34:61 | call to Sprintf | reflectedxsstest.go:34:10:34:62 | type conversion | provenance | | | reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | []type{args} [array] | provenance | | | reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | call to Sprintf | provenance | FunctionModel | -| reflectedxsstest.go:38:2:38:35 | ... := ...[0] | reflectedxsstest.go:39:16:39:21 | reader | provenance | Src:MaD:744 | +| reflectedxsstest.go:38:2:38:35 | ... := ...[0] | reflectedxsstest.go:39:16:39:21 | reader | provenance | Src:MaD:791 | | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:40:14:40:17 | part | provenance | | | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:42:2:42:5 | part | provenance | | -| reflectedxsstest.go:39:16:39:21 | reader | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | provenance | MaD:703 | -| reflectedxsstest.go:40:14:40:17 | part | reflectedxsstest.go:40:14:40:28 | call to FileName | provenance | MaD:701 | +| reflectedxsstest.go:39:16:39:21 | reader | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | provenance | MaD:750 | +| reflectedxsstest.go:40:14:40:17 | part | reflectedxsstest.go:40:14:40:28 | call to FileName | provenance | MaD:748 | | reflectedxsstest.go:40:14:40:28 | call to FileName | reflectedxsstest.go:44:46:44:53 | partName | provenance | | | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | reflectedxsstest.go:45:10:45:18 | byteSlice | provenance | | -| reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | provenance | MaD:626 | +| reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | provenance | MaD:673 | | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | reflectedxsstest.go:44:17:44:54 | call to Sprintf | provenance | MaD:248 | | reflectedxsstest.go:44:17:44:54 | call to Sprintf | reflectedxsstest.go:44:10:44:55 | type conversion | provenance | | | reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | provenance | | | reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | call to Sprintf | provenance | FunctionModel | -| reflectedxsstest.go:51:14:51:18 | selection of URL | reflectedxsstest.go:51:14:51:26 | call to Query | provenance | MaD:808 | +| reflectedxsstest.go:51:14:51:18 | selection of URL | reflectedxsstest.go:51:14:51:26 | call to Query | provenance | Src:MaD:802 MaD:863 | | reflectedxsstest.go:51:14:51:26 | call to Query | reflectedxsstest.go:54:11:54:21 | type conversion | provenance | | -| tst.go:14:15:14:20 | selection of Form | tst.go:14:15:14:36 | call to Get | provenance | MaD:815 | +| tst.go:14:15:14:20 | selection of Form | tst.go:14:15:14:36 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:14:15:14:36 | call to Get | tst.go:18:32:18:32 | a | provenance | | | tst.go:18:19:18:38 | call to Join | tst.go:18:12:18:39 | type conversion | provenance | | -| tst.go:18:32:18:32 | a | tst.go:18:19:18:38 | call to Join | provenance | MaD:907 | -| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:34 | call to Get | provenance | MaD:815 | +| tst.go:18:32:18:32 | a | tst.go:18:19:18:38 | call to Join | provenance | MaD:964 | +| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:34 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:48:14:48:34 | call to Get | tst.go:53:12:53:26 | type conversion | provenance | | -| websocketXss.go:30:7:30:10 | definition of xnet | websocketXss.go:32:24:32:27 | xnet | provenance | | -| websocketXss.go:34:3:34:7 | definition of xnet2 | websocketXss.go:36:24:36:28 | xnet2 | provenance | | -| websocketXss.go:40:3:40:40 | ... := ...[1] | websocketXss.go:41:24:41:29 | nhooyr | provenance | | -| websocketXss.go:46:7:46:16 | definition of gorillaMsg | websocketXss.go:48:24:48:33 | gorillaMsg | provenance | | -| websocketXss.go:50:3:50:10 | definition of gorilla2 | websocketXss.go:52:24:52:31 | gorilla2 | provenance | | -| websocketXss.go:54:3:54:38 | ... := ...[1] | websocketXss.go:55:24:55:31 | gorilla3 | provenance | | +| websocketXss.go:30:7:30:10 | definition of xnet | websocketXss.go:32:24:32:27 | xnet | provenance | Src:MaD:604 | +| websocketXss.go:34:3:34:7 | definition of xnet2 | websocketXss.go:36:24:36:28 | xnet2 | provenance | Src:MaD:603 | +| websocketXss.go:40:3:40:40 | ... := ...[1] | websocketXss.go:41:24:41:29 | nhooyr | provenance | Src:MaD:871 | +| websocketXss.go:46:7:46:16 | definition of gorillaMsg | websocketXss.go:48:24:48:33 | gorillaMsg | provenance | Src:MaD:448 | +| websocketXss.go:50:3:50:10 | definition of gorilla2 | websocketXss.go:52:24:52:31 | gorilla2 | provenance | Src:MaD:449 | +| websocketXss.go:54:3:54:38 | ... := ...[1] | websocketXss.go:55:24:55:31 | gorilla3 | provenance | Src:MaD:450 | nodes | ReflectedXss.go:11:15:11:20 | selection of Form | semmle.label | selection of Form | | ReflectedXss.go:11:15:11:36 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index 3e81377e6a45..1b57d8a4ab65 100644 --- a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -1,12 +1,12 @@ edges | SqlInjection.go:10:7:11:30 | []type{args} [array] | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | MaD:248 | | SqlInjection.go:10:7:11:30 | call to Sprintf | SqlInjection.go:12:11:12:11 | q | provenance | | -| SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | provenance | MaD:808 | +| SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | provenance | Src:MaD:802 MaD:863 | | SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:11:3:11:29 | index expression | provenance | | | SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | []type{args} [array] | provenance | | | SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | FunctionModel | | issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | provenance | | -| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | provenance | MaD:613 | +| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | provenance | Src:MaD:795 MaD:660 | | issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | provenance | MaD:187 | | issue48.go:18:20:18:39 | &... | issue48.go:21:3:21:33 | index expression | provenance | | | issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | provenance | MaD:248 | @@ -14,7 +14,7 @@ edges | issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | []type{args} [array] | provenance | | | issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | provenance | FunctionModel | | issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | provenance | | -| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | provenance | MaD:613 | +| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | provenance | Src:MaD:795 MaD:660 | | issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | provenance | MaD:187 | | issue48.go:28:21:28:41 | &... | issue48.go:31:3:31:31 | selection of Category | provenance | | | issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | provenance | MaD:248 | @@ -22,26 +22,26 @@ edges | issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | []type{args} [array] | provenance | | | issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | call to Sprintf | provenance | FunctionModel | | issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | provenance | MaD:187 | -| issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | provenance | MaD:808 | +| issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | provenance | Src:MaD:802 MaD:863 | | issue48.go:37:24:37:38 | call to Query | issue48.go:37:17:37:50 | type conversion | provenance | | | issue48.go:37:53:37:73 | &... | issue48.go:40:3:40:31 | selection of Category | provenance | | | issue48.go:39:8:40:32 | []type{args} [array] | issue48.go:39:8:40:32 | call to Sprintf | provenance | MaD:248 | | issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | provenance | | | issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | []type{args} [array] | provenance | | | issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | call to Sprintf | provenance | FunctionModel | -| main.go:11:11:11:16 | selection of Form | main.go:11:11:11:28 | index expression | provenance | | +| main.go:11:11:11:16 | selection of Form | main.go:11:11:11:28 | index expression | provenance | Src:MaD:797 | | main.go:15:11:15:84 | []type{args} [array] | main.go:15:11:15:84 | call to Sprintf | provenance | MaD:248 | -| main.go:15:63:15:67 | selection of URL | main.go:15:63:15:75 | call to Query | provenance | MaD:808 | +| main.go:15:63:15:67 | selection of URL | main.go:15:63:15:75 | call to Query | provenance | Src:MaD:802 MaD:863 | | main.go:15:63:15:75 | call to Query | main.go:15:63:15:83 | index expression | provenance | | | main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | []type{args} [array] | provenance | | | main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | call to Sprintf | provenance | FunctionModel | | main.go:16:11:16:85 | []type{args} [array] | main.go:16:11:16:85 | call to Sprintf | provenance | MaD:248 | -| main.go:16:63:16:70 | selection of Header | main.go:16:63:16:84 | call to Get | provenance | MaD:728 | +| main.go:16:63:16:70 | selection of Header | main.go:16:63:16:84 | call to Get | provenance | Src:MaD:800 MaD:775 | | main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | []type{args} [array] | provenance | | | main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | call to Sprintf | provenance | FunctionModel | | main.go:28:17:31:2 | &... [pointer, Category] | main.go:34:3:34:13 | RequestData [pointer, Category] | provenance | | | main.go:28:18:31:2 | struct literal [Category] | main.go:28:17:31:2 | &... [pointer, Category] | provenance | | -| main.go:30:13:30:19 | selection of URL | main.go:30:13:30:27 | call to Query | provenance | MaD:808 | +| main.go:30:13:30:19 | selection of URL | main.go:30:13:30:27 | call to Query | provenance | Src:MaD:802 MaD:863 | | main.go:30:13:30:27 | call to Query | main.go:30:13:30:39 | index expression | provenance | | | main.go:30:13:30:39 | index expression | main.go:28:18:31:2 | struct literal [Category] | provenance | | | main.go:33:7:34:23 | []type{args} [array] | main.go:33:7:34:23 | call to Sprintf | provenance | MaD:248 | @@ -54,7 +54,7 @@ edges | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | provenance | | | main.go:40:2:40:12 | RequestData [pointer, Category] | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | | main.go:40:2:40:12 | implicit dereference [Category] | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | provenance | | -| main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | provenance | MaD:808 | +| main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | provenance | Src:MaD:802 MaD:863 | | main.go:40:25:40:39 | call to Query | main.go:40:25:40:51 | index expression | provenance | | | main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | | main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | provenance | MaD:248 | @@ -67,7 +67,7 @@ edges | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | provenance | | | main.go:49:3:49:14 | star expression [Category] | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | provenance | | | main.go:49:4:49:14 | RequestData [pointer, Category] | main.go:49:3:49:14 | star expression [Category] | provenance | | -| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | provenance | MaD:808 | +| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | provenance | Src:MaD:802 MaD:863 | | main.go:49:28:49:42 | call to Query | main.go:49:28:49:54 | index expression | provenance | | | main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [Category] | provenance | | | main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | provenance | MaD:248 | @@ -80,7 +80,7 @@ edges | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | provenance | | | main.go:58:3:58:14 | star expression [Category] | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | provenance | | | main.go:58:4:58:14 | RequestData [pointer, Category] | main.go:58:3:58:14 | star expression [Category] | provenance | | -| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | provenance | MaD:808 | +| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | provenance | Src:MaD:802 MaD:863 | | main.go:58:28:58:42 | call to Query | main.go:58:28:58:54 | index expression | provenance | | | main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [Category] | provenance | | | main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | provenance | MaD:248 | @@ -89,7 +89,7 @@ edges | main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | call to Sprintf | provenance | FunctionModel | | main.go:61:4:61:15 | star expression [Category] | main.go:61:3:61:25 | selection of Category | provenance | | | main.go:61:5:61:15 | RequestData [pointer, Category] | main.go:61:4:61:15 | star expression [Category] | provenance | | -| mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | provenance | Src:MaD:746 | +| mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | provenance | Src:MaD:793 | | mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:50:34:50:39 | filter | provenance | | | mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:61:27:61:32 | filter | provenance | | | mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:63:23:63:28 | filter | provenance | | diff --git a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected index 84f7c36e1acc..923fa5a71d6a 100644 --- a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected +++ b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected @@ -2,10 +2,10 @@ edges | StringBreak.go:10:2:10:40 | ... := ...[0] | StringBreak.go:14:47:14:57 | versionJSON | provenance | | | StringBreakMismatched.go:12:2:12:40 | ... := ...[0] | StringBreakMismatched.go:13:29:13:47 | type conversion | provenance | | | StringBreakMismatched.go:13:13:13:62 | call to Replace | StringBreakMismatched.go:17:26:17:32 | escaped | provenance | | -| StringBreakMismatched.go:13:29:13:47 | type conversion | StringBreakMismatched.go:13:13:13:62 | call to Replace | provenance | MaD:911 | +| StringBreakMismatched.go:13:29:13:47 | type conversion | StringBreakMismatched.go:13:13:13:62 | call to Replace | provenance | MaD:968 | | StringBreakMismatched.go:24:2:24:40 | ... := ...[0] | StringBreakMismatched.go:25:29:25:47 | type conversion | provenance | | | StringBreakMismatched.go:25:13:25:61 | call to Replace | StringBreakMismatched.go:29:27:29:33 | escaped | provenance | | -| StringBreakMismatched.go:25:29:25:47 | type conversion | StringBreakMismatched.go:25:13:25:61 | call to Replace | provenance | MaD:911 | +| StringBreakMismatched.go:25:29:25:47 | type conversion | StringBreakMismatched.go:25:13:25:61 | call to Replace | provenance | MaD:968 | nodes | StringBreak.go:10:2:10:40 | ... := ...[0] | semmle.label | ... := ...[0] | | StringBreak.go:14:47:14:57 | versionJSON | semmle.label | versionJSON | diff --git a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected index 2302426b968c..1f7fa8d7eca8 100644 --- a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected +++ b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected @@ -1,9 +1,9 @@ edges | klog.go:20:3:25:3 | range statement[1] | klog.go:21:27:21:33 | headers | provenance | | -| klog.go:20:30:20:37 | selection of Header | klog.go:20:3:25:3 | range statement[1] | provenance | Config | +| klog.go:20:30:20:37 | selection of Header | klog.go:20:3:25:3 | range statement[1] | provenance | Src:MaD:800 Config | | klog.go:21:4:24:4 | range statement[1] | klog.go:22:15:22:20 | header | provenance | | | klog.go:21:27:21:33 | headers | klog.go:21:4:24:4 | range statement[1] | provenance | Config | -| klog.go:28:13:28:20 | selection of Header | klog.go:28:13:28:41 | call to Get | provenance | Config | +| klog.go:28:13:28:20 | selection of Header | klog.go:28:13:28:41 | call to Get | provenance | Src:MaD:800 Config | | overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | provenance | | | passwords.go:8:12:8:12 | definition of x | passwords.go:9:14:9:14 | x | provenance | | | passwords.go:30:8:30:15 | password | passwords.go:8:12:8:12 | definition of x | provenance | | diff --git a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected index 18e9ba4abd44..27d27a1f4cf5 100644 --- a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected +++ b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected @@ -9,7 +9,7 @@ edges | sample.go:33:2:33:6 | definition of nonce | sample.go:37:25:37:29 | nonce | provenance | | | sample.go:33:2:33:6 | definition of nonce | sample.go:37:32:37:36 | nonce | provenance | | | sample.go:34:12:34:40 | call to New | sample.go:35:14:35:19 | random | provenance | | -| sample.go:35:14:35:19 | random | sample.go:33:2:33:6 | definition of nonce | provenance | MaD:622 | +| sample.go:35:14:35:19 | random | sample.go:33:2:33:6 | definition of nonce | provenance | MaD:669 | | sample.go:55:17:55:42 | call to Intn | sample.go:56:29:56:38 | randNumber | provenance | | | sample.go:56:11:56:40 | type conversion | sample.go:58:32:58:43 | type conversion | provenance | | | sample.go:56:18:56:39 | index expression | sample.go:56:11:56:40 | type conversion | provenance | | diff --git a/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected index 57c2fac8135d..32c78cc4e9db 100644 --- a/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected +++ b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected @@ -1,16 +1,16 @@ edges -| go-jose.v3.go:25:16:25:20 | selection of URL | go-jose.v3.go:25:16:25:28 | call to Query | provenance | MaD:808 | -| go-jose.v3.go:25:16:25:28 | call to Query | go-jose.v3.go:25:16:25:47 | call to Get | provenance | MaD:815 | +| go-jose.v3.go:25:16:25:20 | selection of URL | go-jose.v3.go:25:16:25:28 | call to Query | provenance | Src:MaD:802 MaD:863 | +| go-jose.v3.go:25:16:25:28 | call to Query | go-jose.v3.go:25:16:25:47 | call to Get | provenance | MaD:870 | | go-jose.v3.go:25:16:25:47 | call to Get | go-jose.v3.go:26:15:26:25 | signedToken | provenance | | | go-jose.v3.go:26:15:26:25 | signedToken | go-jose.v3.go:29:19:29:29 | definition of signedToken | provenance | | | go-jose.v3.go:29:19:29:29 | definition of signedToken | go-jose.v3.go:31:37:31:47 | signedToken | provenance | | -| go-jose.v3.go:31:2:31:48 | ... := ...[0] | go-jose.v3.go:33:12:33:23 | DecodedToken | provenance | Sink:MaD:394 | -| go-jose.v3.go:31:37:31:47 | signedToken | go-jose.v3.go:31:2:31:48 | ... := ...[0] | provenance | MaD:396 | -| golang-jwt-v5.go:28:16:28:20 | selection of URL | golang-jwt-v5.go:28:16:28:28 | call to Query | provenance | MaD:808 | -| golang-jwt-v5.go:28:16:28:28 | call to Query | golang-jwt-v5.go:28:16:28:47 | call to Get | provenance | MaD:815 | +| go-jose.v3.go:31:2:31:48 | ... := ...[0] | go-jose.v3.go:33:12:33:23 | DecodedToken | provenance | Sink:MaD:415 | +| go-jose.v3.go:31:37:31:47 | signedToken | go-jose.v3.go:31:2:31:48 | ... := ...[0] | provenance | MaD:417 | +| golang-jwt-v5.go:28:16:28:20 | selection of URL | golang-jwt-v5.go:28:16:28:28 | call to Query | provenance | Src:MaD:802 MaD:863 | +| golang-jwt-v5.go:28:16:28:28 | call to Query | golang-jwt-v5.go:28:16:28:47 | call to Get | provenance | MaD:870 | | golang-jwt-v5.go:28:16:28:47 | call to Get | golang-jwt-v5.go:29:25:29:35 | signedToken | provenance | | | golang-jwt-v5.go:29:25:29:35 | signedToken | golang-jwt-v5.go:32:29:32:39 | definition of signedToken | provenance | | -| golang-jwt-v5.go:32:29:32:39 | definition of signedToken | golang-jwt-v5.go:34:58:34:68 | signedToken | provenance | Sink:MaD:408 | +| golang-jwt-v5.go:32:29:32:39 | definition of signedToken | golang-jwt-v5.go:34:58:34:68 | signedToken | provenance | Sink:MaD:431 | nodes | go-jose.v3.go:25:16:25:20 | selection of URL | semmle.label | selection of URL | | go-jose.v3.go:25:16:25:28 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected b/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected index 86842f028d9c..aea61f57f6b2 100644 --- a/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected +++ b/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected @@ -12,8 +12,8 @@ edges | main.go:68:17:68:24 | argument corresponding to redirect | main.go:73:20:73:27 | redirect | provenance | | | main.go:68:17:68:24 | definition of redirect | main.go:73:20:73:27 | redirect | provenance | | | main.go:73:9:73:28 | call to Clean | main.go:77:25:77:39 | call to getTarget1 | provenance | | -| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | provenance | MaD:834 | -| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | provenance | MaD:834 | +| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | provenance | MaD:891 | +| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | provenance | MaD:891 | | main.go:76:19:76:21 | argument corresponding to url | main.go:77:36:77:38 | url | provenance | | | main.go:77:36:77:38 | url | main.go:68:17:68:24 | definition of redirect | provenance | | | main.go:77:36:77:38 | url | main.go:77:25:77:39 | call to getTarget1 | provenance | | diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected index c24487ab4918..3d0e867ca97e 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected @@ -1,19 +1,19 @@ edges -| OpenUrlRedirect.go:10:23:10:28 | selection of Form | OpenUrlRedirect.go:10:23:10:42 | call to Get | provenance | Config | -| stdlib.go:13:13:13:18 | selection of Form | stdlib.go:13:13:13:32 | call to Get | provenance | Config | +| OpenUrlRedirect.go:10:23:10:28 | selection of Form | OpenUrlRedirect.go:10:23:10:42 | call to Get | provenance | Src:MaD:797 Config | +| stdlib.go:13:13:13:18 | selection of Form | stdlib.go:13:13:13:32 | call to Get | provenance | Src:MaD:797 Config | | stdlib.go:13:13:13:32 | call to Get | stdlib.go:15:30:15:35 | target | provenance | | -| stdlib.go:22:13:22:18 | selection of Form | stdlib.go:22:13:22:32 | call to Get | provenance | Config | +| stdlib.go:22:13:22:18 | selection of Form | stdlib.go:22:13:22:32 | call to Get | provenance | Src:MaD:797 Config | | stdlib.go:22:13:22:32 | call to Get | stdlib.go:24:30:24:35 | target | provenance | | -| stdlib.go:31:13:31:18 | selection of Form | stdlib.go:31:13:31:32 | call to Get | provenance | Config | +| stdlib.go:31:13:31:18 | selection of Form | stdlib.go:31:13:31:32 | call to Get | provenance | Src:MaD:797 Config | | stdlib.go:31:13:31:32 | call to Get | stdlib.go:35:34:35:39 | target | provenance | | | stdlib.go:35:34:35:39 | target | stdlib.go:35:30:35:39 | ...+... | provenance | Config | -| stdlib.go:44:13:44:18 | selection of Form | stdlib.go:44:13:44:32 | call to Get | provenance | Config | +| stdlib.go:44:13:44:18 | selection of Form | stdlib.go:44:13:44:32 | call to Get | provenance | Src:MaD:797 Config | | stdlib.go:44:13:44:32 | call to Get | stdlib.go:46:23:46:28 | target | provenance | | -| stdlib.go:64:13:64:18 | selection of Form | stdlib.go:64:13:64:32 | call to Get | provenance | Config | +| stdlib.go:64:13:64:18 | selection of Form | stdlib.go:64:13:64:32 | call to Get | provenance | Src:MaD:797 Config | | stdlib.go:64:13:64:32 | call to Get | stdlib.go:67:23:67:28 | target | provenance | | | stdlib.go:67:23:67:28 | target | stdlib.go:67:23:67:37 | ...+... | provenance | Config | | stdlib.go:67:23:67:37 | ...+... | stdlib.go:67:23:67:40 | ...+... | provenance | Config | -| stdlib.go:89:13:89:18 | selection of Form | stdlib.go:89:13:89:32 | call to Get | provenance | Config | +| stdlib.go:89:13:89:18 | selection of Form | stdlib.go:89:13:89:32 | call to Get | provenance | Src:MaD:797 Config | | stdlib.go:89:13:89:32 | call to Get | stdlib.go:90:3:90:8 | target | provenance | | | stdlib.go:90:3:90:8 | target | stdlib.go:90:3:90:25 | ... += ... | provenance | Config | | stdlib.go:90:3:90:25 | ... += ... | stdlib.go:92:23:92:28 | target | provenance | | @@ -28,26 +28,26 @@ edges | stdlib.go:112:4:112:4 | r [pointer, URL] | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | | | stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL | provenance | Config | | stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL [pointer] | provenance | | -| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | | -| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:8 | implicit dereference | provenance | Config | +| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | Src:MaD:802 | +| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:8 | implicit dereference | provenance | Src:MaD:802 Config | | stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | provenance | | | stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:8 | implicit dereference | provenance | | | stdlib.go:113:24:113:24 | implicit dereference [URL] | stdlib.go:113:24:113:28 | selection of URL | provenance | | | stdlib.go:113:24:113:24 | r [pointer, URL] | stdlib.go:113:24:113:24 | implicit dereference [URL] | provenance | | -| stdlib.go:113:24:113:28 | selection of URL | stdlib.go:113:24:113:37 | call to String | provenance | Config | -| stdlib.go:146:13:146:18 | selection of Form | stdlib.go:146:13:146:32 | call to Get | provenance | Config | +| stdlib.go:113:24:113:28 | selection of URL | stdlib.go:113:24:113:37 | call to String | provenance | Src:MaD:802 Config | +| stdlib.go:146:13:146:18 | selection of Form | stdlib.go:146:13:146:32 | call to Get | provenance | Src:MaD:797 Config | | stdlib.go:146:13:146:32 | call to Get | stdlib.go:152:23:152:28 | target | provenance | | | stdlib.go:159:10:159:15 | star expression | stdlib.go:159:11:159:15 | selection of URL | provenance | Config | | stdlib.go:159:10:159:15 | star expression | stdlib.go:162:24:162:26 | url | provenance | | -| stdlib.go:159:11:159:15 | selection of URL | stdlib.go:159:10:159:15 | star expression | provenance | Config | +| stdlib.go:159:11:159:15 | selection of URL | stdlib.go:159:10:159:15 | star expression | provenance | Src:MaD:802 Config | | stdlib.go:162:24:162:26 | url | stdlib.go:162:24:162:35 | call to String | provenance | Config | -| stdlib.go:173:35:173:39 | selection of URL | stdlib.go:173:35:173:52 | call to RequestURI | provenance | Config | +| stdlib.go:173:35:173:39 | selection of URL | stdlib.go:173:35:173:52 | call to RequestURI | provenance | Src:MaD:802 Config | | stdlib.go:173:35:173:52 | call to RequestURI | stdlib.go:173:24:173:52 | ...+... | provenance | Config | -| stdlib.go:182:13:182:33 | call to FormValue | stdlib.go:184:23:184:28 | target | provenance | Src:MaD:743 | +| stdlib.go:182:13:182:33 | call to FormValue | stdlib.go:184:23:184:28 | target | provenance | Src:MaD:790 | | stdlib.go:190:3:190:8 | definition of target | stdlib.go:192:23:192:28 | target | provenance | | | stdlib.go:190:3:190:8 | definition of target | stdlib.go:194:23:194:28 | target | provenance | | | stdlib.go:190:3:190:57 | ... := ...[0] | stdlib.go:190:3:190:8 | definition of target | provenance | | -| stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:190:3:190:57 | ... := ...[0] | provenance | Src:MaD:743 Config | +| stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:190:3:190:57 | ... := ...[0] | provenance | Src:MaD:790 Config | | stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:190:3:190:8 | definition of target | provenance | Config | | stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:192:23:192:33 | selection of Path | provenance | Config | | stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:28 | implicit dereference | provenance | Config | diff --git a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected index a1f71c46e203..07c431401623 100644 --- a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected @@ -1,23 +1,23 @@ edges -| EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:9:10:9:29 | call to Get | provenance | MaD:728 | +| EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:9:10:9:29 | call to Get | provenance | Src:MaD:800 MaD:775 | | EmailBad.go:9:10:9:29 | call to Get | EmailBad.go:12:56:12:67 | type conversion | provenance | | -| main.go:29:21:29:31 | call to Referer | main.go:31:57:31:78 | type conversion | provenance | Src:MaD:746 | -| main.go:37:21:37:31 | call to Referer | main.go:41:25:41:38 | untrustedInput | provenance | Src:MaD:746 | -| main.go:41:25:41:38 | untrustedInput | main.go:40:3:40:7 | definition of write | provenance | MaD:625 | -| main.go:46:21:46:31 | call to Referer | main.go:52:46:52:59 | untrustedInput | provenance | Src:MaD:746 | -| main.go:46:21:46:31 | call to Referer | main.go:53:52:53:65 | untrustedInput | provenance | Src:MaD:746 | -| main.go:58:21:58:31 | call to Referer | main.go:60:47:60:60 | untrustedInput | provenance | Src:MaD:746 | +| main.go:29:21:29:31 | call to Referer | main.go:31:57:31:78 | type conversion | provenance | Src:MaD:793 | +| main.go:37:21:37:31 | call to Referer | main.go:41:25:41:38 | untrustedInput | provenance | Src:MaD:793 | +| main.go:41:25:41:38 | untrustedInput | main.go:40:3:40:7 | definition of write | provenance | MaD:672 | +| main.go:46:21:46:31 | call to Referer | main.go:52:46:52:59 | untrustedInput | provenance | Src:MaD:793 | +| main.go:46:21:46:31 | call to Referer | main.go:53:52:53:65 | untrustedInput | provenance | Src:MaD:793 | +| main.go:58:21:58:31 | call to Referer | main.go:60:47:60:60 | untrustedInput | provenance | Src:MaD:793 | | main.go:60:14:60:61 | call to NewContent | main.go:63:16:63:22 | content | provenance | | -| main.go:60:47:60:60 | untrustedInput | main.go:60:14:60:61 | call to NewContent | provenance | MaD:457 | -| main.go:68:21:68:31 | call to Referer | main.go:74:47:74:60 | untrustedInput | provenance | Src:MaD:746 | +| main.go:60:47:60:60 | untrustedInput | main.go:60:14:60:61 | call to NewContent | provenance | MaD:515 | +| main.go:68:21:68:31 | call to Referer | main.go:74:47:74:60 | untrustedInput | provenance | Src:MaD:793 | | main.go:74:14:74:61 | call to NewContent | main.go:76:50:76:56 | content | provenance | | | main.go:74:14:74:61 | call to NewContent | main.go:76:59:76:65 | content | provenance | | | main.go:74:14:74:61 | call to NewContent | main.go:77:16:77:22 | content | provenance | | -| main.go:74:47:74:60 | untrustedInput | main.go:74:14:74:61 | call to NewContent | provenance | MaD:457 | -| main.go:82:21:82:31 | call to Referer | main.go:89:37:89:50 | untrustedInput | provenance | Src:MaD:746 | -| main.go:82:21:82:31 | call to Referer | main.go:91:48:91:61 | untrustedInput | provenance | Src:MaD:746 | +| main.go:74:47:74:60 | untrustedInput | main.go:74:14:74:61 | call to NewContent | provenance | MaD:515 | +| main.go:82:21:82:31 | call to Referer | main.go:89:37:89:50 | untrustedInput | provenance | Src:MaD:793 | +| main.go:82:21:82:31 | call to Referer | main.go:91:48:91:61 | untrustedInput | provenance | Src:MaD:793 | | main.go:91:15:91:62 | call to NewContent | main.go:93:16:93:23 | content2 | provenance | | -| main.go:91:48:91:61 | untrustedInput | main.go:91:15:91:62 | call to NewContent | provenance | MaD:457 | +| main.go:91:48:91:61 | untrustedInput | main.go:91:15:91:62 | call to NewContent | provenance | MaD:515 | nodes | EmailBad.go:9:10:9:17 | selection of Header | semmle.label | selection of Header | | EmailBad.go:9:10:9:29 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected index 2aaa4d2dae4d..47739bb945b9 100644 --- a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected @@ -1,16 +1,16 @@ edges -| XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:13:14:13:35 | call to Get | provenance | MaD:815 | +| XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:13:14:13:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | XPathInjection.go:13:14:13:35 | call to Get | XPathInjection.go:16:29:16:91 | ...+... | provenance | | -| tst.go:34:14:34:19 | selection of Form | tst.go:34:14:34:35 | call to Get | provenance | MaD:815 | +| tst.go:34:14:34:19 | selection of Form | tst.go:34:14:34:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:34:14:34:35 | call to Get | tst.go:37:23:37:85 | ...+... | provenance | | | tst.go:34:14:34:35 | call to Get | tst.go:40:24:40:86 | ...+... | provenance | | | tst.go:34:14:34:35 | call to Get | tst.go:43:24:43:82 | ...+... | provenance | | -| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:35 | call to Get | provenance | MaD:815 | +| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:48:14:48:35 | call to Get | tst.go:51:26:51:84 | ...+... | provenance | | | tst.go:48:14:48:35 | call to Get | tst.go:54:29:54:87 | ...+... | provenance | | | tst.go:48:14:48:35 | call to Get | tst.go:57:33:57:91 | ...+... | provenance | | | tst.go:48:14:48:35 | call to Get | tst.go:60:30:60:88 | ...+... | provenance | | -| tst.go:65:14:65:19 | selection of Form | tst.go:65:14:65:35 | call to Get | provenance | MaD:815 | +| tst.go:65:14:65:19 | selection of Form | tst.go:65:14:65:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:65:14:65:35 | call to Get | tst.go:68:25:68:83 | ...+... | provenance | | | tst.go:65:14:65:35 | call to Get | tst.go:71:28:71:86 | ...+... | provenance | | | tst.go:65:14:65:35 | call to Get | tst.go:74:25:74:83 | ...+... | provenance | | @@ -19,38 +19,38 @@ edges | tst.go:65:14:65:35 | call to Get | tst.go:83:29:83:87 | ...+... | provenance | | | tst.go:65:14:65:35 | call to Get | tst.go:86:23:86:85 | ...+... | provenance | | | tst.go:65:14:65:35 | call to Get | tst.go:89:22:89:84 | ...+... | provenance | | -| tst.go:94:14:94:19 | selection of Form | tst.go:94:14:94:35 | call to Get | provenance | MaD:815 | +| tst.go:94:14:94:19 | selection of Form | tst.go:94:14:94:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:94:14:94:35 | call to Get | tst.go:97:26:97:84 | ...+... | provenance | | | tst.go:94:14:94:35 | call to Get | tst.go:100:29:100:87 | ...+... | provenance | | | tst.go:94:14:94:35 | call to Get | tst.go:103:33:103:91 | ...+... | provenance | | | tst.go:94:14:94:35 | call to Get | tst.go:106:30:106:88 | ...+... | provenance | | -| tst.go:111:14:111:19 | selection of Form | tst.go:111:14:111:35 | call to Get | provenance | MaD:815 | +| tst.go:111:14:111:19 | selection of Form | tst.go:111:14:111:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:111:14:111:35 | call to Get | tst.go:114:25:114:87 | ...+... | provenance | | | tst.go:111:14:111:35 | call to Get | tst.go:117:26:117:88 | ...+... | provenance | | -| tst.go:122:14:122:19 | selection of Form | tst.go:122:14:122:35 | call to Get | provenance | MaD:815 | +| tst.go:122:14:122:19 | selection of Form | tst.go:122:14:122:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:122:14:122:35 | call to Get | tst.go:126:23:126:126 | ...+... | provenance | | | tst.go:122:14:122:35 | call to Get | tst.go:129:24:129:127 | ...+... | provenance | | | tst.go:122:14:122:35 | call to Get | tst.go:132:27:132:122 | ...+... | provenance | | -| tst.go:123:14:123:19 | selection of Form | tst.go:123:14:123:35 | call to Get | provenance | MaD:815 | +| tst.go:123:14:123:19 | selection of Form | tst.go:123:14:123:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:123:14:123:35 | call to Get | tst.go:126:23:126:126 | ...+... | provenance | | | tst.go:123:14:123:35 | call to Get | tst.go:129:24:129:127 | ...+... | provenance | | | tst.go:123:14:123:35 | call to Get | tst.go:132:27:132:122 | ...+... | provenance | | -| tst.go:140:14:140:19 | selection of Form | tst.go:140:14:140:35 | call to Get | provenance | MaD:815 | +| tst.go:140:14:140:19 | selection of Form | tst.go:140:14:140:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:140:14:140:35 | call to Get | tst.go:143:27:143:89 | ...+... | provenance | | | tst.go:140:14:140:35 | call to Get | tst.go:146:28:146:90 | ...+... | provenance | | -| tst.go:151:14:151:19 | selection of Form | tst.go:151:14:151:35 | call to Get | provenance | MaD:815 | +| tst.go:151:14:151:19 | selection of Form | tst.go:151:14:151:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:151:14:151:35 | call to Get | tst.go:155:33:155:136 | ...+... | provenance | | | tst.go:151:14:151:35 | call to Get | tst.go:158:18:158:121 | ...+... | provenance | | | tst.go:151:14:151:35 | call to Get | tst.go:164:31:164:126 | ...+... | provenance | | | tst.go:151:14:151:35 | call to Get | tst.go:173:21:173:116 | ...+... | provenance | | | tst.go:151:14:151:35 | call to Get | tst.go:182:27:182:122 | ...+... | provenance | | -| tst.go:152:14:152:19 | selection of Form | tst.go:152:14:152:35 | call to Get | provenance | MaD:815 | +| tst.go:152:14:152:19 | selection of Form | tst.go:152:14:152:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:152:14:152:35 | call to Get | tst.go:155:33:155:136 | ...+... | provenance | | | tst.go:152:14:152:35 | call to Get | tst.go:158:18:158:121 | ...+... | provenance | | | tst.go:152:14:152:35 | call to Get | tst.go:164:31:164:126 | ...+... | provenance | | | tst.go:152:14:152:35 | call to Get | tst.go:173:21:173:116 | ...+... | provenance | | | tst.go:152:14:152:35 | call to Get | tst.go:182:27:182:122 | ...+... | provenance | | -| tst.go:193:14:193:19 | selection of Form | tst.go:193:14:193:35 | call to Get | provenance | MaD:815 | +| tst.go:193:14:193:19 | selection of Form | tst.go:193:14:193:35 | call to Get | provenance | Src:MaD:797 MaD:870 | | tst.go:193:14:193:35 | call to Get | tst.go:198:23:198:85 | ...+... | provenance | | nodes | XPathInjection.go:13:14:13:19 | selection of Form | semmle.label | selection of Form | diff --git a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index dfe10af24ef4..f575ad436dcf 100644 --- a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -1,12 +1,12 @@ edges -| RequestForgery.go:8:12:8:34 | call to FormValue | RequestForgery.go:11:24:11:65 | ...+... | provenance | Src:MaD:743 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:14:11:14:17 | tainted | provenance | Src:MaD:743 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:18:12:18:18 | tainted | provenance | Src:MaD:743 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:21:34:21:40 | tainted | provenance | Src:MaD:743 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:24:66:24:72 | tainted | provenance | Src:MaD:743 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:27:11:27:29 | ...+... | provenance | Src:MaD:743 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:29:11:29:40 | ...+... | provenance | Src:MaD:743 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:36:11:36:17 | tainted | provenance | Src:MaD:743 | +| RequestForgery.go:8:12:8:34 | call to FormValue | RequestForgery.go:11:24:11:65 | ...+... | provenance | Src:MaD:790 | +| tst.go:10:13:10:35 | call to FormValue | tst.go:14:11:14:17 | tainted | provenance | Src:MaD:790 | +| tst.go:10:13:10:35 | call to FormValue | tst.go:18:12:18:18 | tainted | provenance | Src:MaD:790 | +| tst.go:10:13:10:35 | call to FormValue | tst.go:21:34:21:40 | tainted | provenance | Src:MaD:790 | +| tst.go:10:13:10:35 | call to FormValue | tst.go:24:66:24:72 | tainted | provenance | Src:MaD:790 | +| tst.go:10:13:10:35 | call to FormValue | tst.go:27:11:27:29 | ...+... | provenance | Src:MaD:790 | +| tst.go:10:13:10:35 | call to FormValue | tst.go:29:11:29:40 | ...+... | provenance | Src:MaD:790 | +| tst.go:10:13:10:35 | call to FormValue | tst.go:36:11:36:17 | tainted | provenance | Src:MaD:790 | | tst.go:35:2:35:2 | definition of u [pointer] | tst.go:36:2:36:2 | u [pointer] | provenance | | | tst.go:36:2:36:2 | implicit dereference | tst.go:35:2:35:2 | definition of u [pointer] | provenance | | | tst.go:36:2:36:2 | implicit dereference | tst.go:36:2:36:2 | u | provenance | | @@ -18,15 +18,15 @@ edges | tst.go:36:11:36:17 | tainted | tst.go:36:2:36:2 | u | provenance | Config | | tst.go:36:11:36:17 | tainted | tst.go:37:11:37:11 | u | provenance | Config | | tst.go:37:11:37:11 | u | tst.go:37:11:37:20 | call to String | provenance | MaD:238 | -| websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | provenance | Src:MaD:746 | -| websocket.go:74:21:74:31 | call to Referer | websocket.go:78:36:78:49 | untrustedInput | provenance | Src:MaD:746 | -| websocket.go:88:21:88:31 | call to Referer | websocket.go:91:31:91:44 | untrustedInput | provenance | Src:MaD:746 | -| websocket.go:107:21:107:31 | call to Referer | websocket.go:110:15:110:28 | untrustedInput | provenance | Src:MaD:746 | -| websocket.go:126:21:126:31 | call to Referer | websocket.go:129:38:129:51 | untrustedInput | provenance | Src:MaD:746 | -| websocket.go:154:21:154:31 | call to Referer | websocket.go:155:31:155:44 | untrustedInput | provenance | Src:MaD:746 | -| websocket.go:160:21:160:31 | call to Referer | websocket.go:162:31:162:44 | untrustedInput | provenance | Src:MaD:746 | -| websocket.go:195:21:195:31 | call to Referer | websocket.go:197:18:197:31 | untrustedInput | provenance | Src:MaD:746 | -| websocket.go:202:21:202:31 | call to Referer | websocket.go:204:11:204:24 | untrustedInput | provenance | Src:MaD:746 | +| websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | provenance | Src:MaD:793 | +| websocket.go:74:21:74:31 | call to Referer | websocket.go:78:36:78:49 | untrustedInput | provenance | Src:MaD:793 | +| websocket.go:88:21:88:31 | call to Referer | websocket.go:91:31:91:44 | untrustedInput | provenance | Src:MaD:793 | +| websocket.go:107:21:107:31 | call to Referer | websocket.go:110:15:110:28 | untrustedInput | provenance | Src:MaD:793 | +| websocket.go:126:21:126:31 | call to Referer | websocket.go:129:38:129:51 | untrustedInput | provenance | Src:MaD:793 | +| websocket.go:154:21:154:31 | call to Referer | websocket.go:155:31:155:44 | untrustedInput | provenance | Src:MaD:793 | +| websocket.go:160:21:160:31 | call to Referer | websocket.go:162:31:162:44 | untrustedInput | provenance | Src:MaD:793 | +| websocket.go:195:21:195:31 | call to Referer | websocket.go:197:18:197:31 | untrustedInput | provenance | Src:MaD:793 | +| websocket.go:202:21:202:31 | call to Referer | websocket.go:204:11:204:24 | untrustedInput | provenance | Src:MaD:793 | nodes | RequestForgery.go:8:12:8:34 | call to FormValue | semmle.label | call to FormValue | | RequestForgery.go:11:24:11:65 | ...+... | semmle.label | ...+... | diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 1af2be3945e5..c41c38f1e713 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -56,7 +56,7 @@ freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,, groovy.lang,26,,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, groovy.text,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, groovy.util,5,,,,,,,,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -hudson,74,9,2648,,4,,,,,,3,2,,,,4,,,,,,,,,,,55,,,,,,,,,6,,,,,,,,,,,,,5,4,2572,76 +hudson,75,9,2648,,4,,,,,,3,2,,,,4,,,,,,,,,,,56,,,,,,,,,6,,,,,,,,,,,,,5,4,2572,76 io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,, io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 @@ -80,7 +80,7 @@ java.applet,,,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,14, java.awt,1,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,2,3 java.beans,,,193,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,193, java.io,66,1,256,,,,,,,,,22,,,,,,,,,,,,,,,44,,,,,,,,,,,,,,,,,,,,,,1,,249,7 -java.lang,38,3,759,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,3,,,681,78 +java.lang,38,3,756,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,3,,,681,75 java.math,,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9 java.net,23,3,278,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,3,274,4 java.nio,44,,361,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,,259,102 @@ -151,7 +151,7 @@ org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, org.apache.commons.exec,10,,,,6,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.commons.io,124,,562,,,,,,,,,4,,,,,,,,,,,,,,,105,,,,,,,,,15,,,,,,,,,,,,,,,548,14 +org.apache.commons.io,124,,570,,,,,,,,,4,,,,,,,,,,,,,,,105,,,,,,,,,15,,,,,,,,,,,,,,,556,14 org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,, org.apache.commons.jexl2,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.jexl3,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index a84cc6bef530..031f815e70f5 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -10,7 +10,7 @@ Java framework & library support Android,``android.*``,52,481,181,1,3,67,,, Android extensions,``androidx.*``,5,183,60,,,,,, `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,, - `Apache Commons IO `_,``org.apache.commons.io``,,562,124,105,,,,,15 + `Apache Commons IO `_,``org.apache.commons.io``,,570,124,105,,,,,15 `Apache Commons Lang `_,``org.apache.commons.lang3``,,425,6,,,,,, `Apache Commons Text `_,``org.apache.commons.text``,,272,,,,,,, `Apache HttpComponents `_,"``org.apache.hc.core5.*``, ``org.apache.http``",5,183,122,,3,,,,119 @@ -18,10 +18,10 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,4267,255,95,,9,,,26 + Java Standard Library,``java.*``,10,4264,255,95,,9,,,26 Java extensions,"``javax.*``, ``jakarta.*``",69,3257,90,10,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 `Spring `_,``org.springframework.*``,38,486,122,5,,28,14,,35 - Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``io.undertow.server.handlers.resource``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jboss.vfs``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.w3c.dom``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.awt``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.management.spi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.nio.ch``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``, ``sun.util.logging.internal``",131,10599,895,127,6,22,18,,208 - Totals,,310,25138,2597,366,16,128,33,1,409 + Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``io.undertow.server.handlers.resource``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jboss.vfs``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.w3c.dom``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.awt``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.management.spi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.nio.ch``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``, ``sun.util.logging.internal``",131,10599,896,128,6,22,18,,208 + Totals,,310,25143,2598,367,16,128,33,1,409 diff --git a/java/kotlin-extractor/deps/kotlin-compiler-2.0.20-Beta2.jar b/java/kotlin-extractor/deps/kotlin-compiler-2.0.20-Beta2.jar new file mode 100644 index 000000000000..b9007eae8eba --- /dev/null +++ b/java/kotlin-extractor/deps/kotlin-compiler-2.0.20-Beta2.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5cdb8728892eee348f52dbd00eeeffffe8f39a7ec48ceac496dab5f41554915 +size 59652360 diff --git a/java/kotlin-extractor/deps/kotlin-compiler-embeddable-2.0.20-Beta2.jar b/java/kotlin-extractor/deps/kotlin-compiler-embeddable-2.0.20-Beta2.jar new file mode 100644 index 000000000000..6db5b51d04ae --- /dev/null +++ b/java/kotlin-extractor/deps/kotlin-compiler-embeddable-2.0.20-Beta2.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd05f9081cd85a73d804a1b355356ad433c8bba64388ef51d76e09fdbc4098b4 +size 58218956 diff --git a/java/kotlin-extractor/deps/kotlin-stdlib-2.0.20-Beta2.jar b/java/kotlin-extractor/deps/kotlin-stdlib-2.0.20-Beta2.jar new file mode 100644 index 000000000000..d4b4b56d460a --- /dev/null +++ b/java/kotlin-extractor/deps/kotlin-stdlib-2.0.20-Beta2.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac59c5888b44b7f392628df7f1adba5d987f022071cfdec8826115a25069cd88 +size 1746790 diff --git a/java/kotlin-extractor/dev/.gitignore b/java/kotlin-extractor/dev/.gitignore index 74a035783b57..07cf473f632a 100644 --- a/java/kotlin-extractor/dev/.gitignore +++ b/java/kotlin-extractor/dev/.gitignore @@ -1,2 +1 @@ -/.kotlinc_version -/.kotlinc_installed +/.kotlinc_* diff --git a/java/kotlin-extractor/dev/wrapper.py b/java/kotlin-extractor/dev/wrapper.py index 13a4d1aca602..d4191d363824 100755 --- a/java/kotlin-extractor/dev/wrapper.py +++ b/java/kotlin-extractor/dev/wrapper.py @@ -29,6 +29,7 @@ DEFAULT_VERSION = "2.0.0" + def options(): parser = argparse.ArgumentParser(add_help=False) parser.add_argument("tool") @@ -38,11 +39,15 @@ def options(): return parser.parse_known_args() -url_template = 'https://github.com/JetBrains/kotlin/releases/download/v{version}/kotlin-compiler-{version}.zip' +file_template = "kotlin-compiler-{version}.zip" +url_template = "https://github.com/JetBrains/kotlin/releases/download/v{version}/kotlin-compiler-{version}.zip" this_dir = pathlib.Path(__file__).resolve().parent version_file = this_dir / ".kotlinc_version" install_dir = this_dir / ".kotlinc_installed" -windows_ripunzip = this_dir.parents[4] / "resources" / "lib" / "windows" / "ripunzip" / "ripunzip.exe" +zips_dir = this_dir / ".kotlinc_zips" +windows_ripunzip = ( + this_dir.parents[4] / "resources" / "lib" / "windows" / "ripunzip" / "ripunzip.exe" +) class Error(Exception): @@ -62,16 +67,6 @@ def _extract_member(self, member, targetpath, pwd): return targetpath -def check_version(version: str): - try: - with urllib.request.urlopen(url_template.format(version=version)) as response: - pass - except urllib.error.HTTPError as e: - if e.code == 404: - raise Error(f"Version {version} not found in github.com/JetBrains/kotlin/releases") from e - raise - - def get_version(): try: return version_file.read_text() @@ -86,29 +81,39 @@ def install(version: str, quiet: bool): else: info_out = sys.stderr info = lambda *args: print(*args, file=sys.stderr) + file = file_template.format(version=version) url = url_template.format(version=version) if install_dir.exists(): shutil.rmtree(install_dir) install_dir.mkdir() + zips_dir.mkdir(exist_ok=True) + zip = zips_dir / file + + if not zip.exists(): + info(f"downloading {url}") + tmp_zip = zip.with_suffix(".tmp") + with open(tmp_zip, "wb") as out, urllib.request.urlopen(url) as response: + shutil.copyfileobj(response, out) + tmp_zip.rename(zip) ripunzip = shutil.which("ripunzip") - if ripunzip is None and platform.system() == "Windows" and windows_ripunzip.exists(): + if ( + ripunzip is None + and platform.system() == "Windows" + and windows_ripunzip.exists() + ): ripunzip = windows_ripunzip if ripunzip: - info(f"downloading and extracting {url} using ripunzip") - subprocess.run([ripunzip, "unzip-uri", url], stdout=info_out, stderr=info_out, cwd=install_dir, - check=True) - return - with io.BytesIO() as buffer: - info(f"downloading {url}") - with urllib.request.urlopen(url) as response: - while True: - bytes = response.read() - if not bytes: - break - buffer.write(bytes) - buffer.seek(0) - info(f"extracting kotlin-compiler-{version}.zip") - with ZipFilePreservingPermissions(buffer) as archive: + info(f"extracting {zip} using ripunzip") + subprocess.run( + [ripunzip, "unzip-file", zip], + stdout=info_out, + stderr=info_out, + cwd=install_dir, + check=True, + ) + else: + info(f"extracting {zip}") + with ZipFilePreservingPermissions(zip) as archive: archive.extractall(install_dir) @@ -130,6 +135,9 @@ def clear(): if version_file.exists(): print(f"removing {version_file}", file=sys.stderr) version_file.unlink() + if zips_dir.exists(): + print(f"removing {zips_dir}", file=sys.stderr) + shutil.rmtree(zips_dir) def main(opts, forwarded_opts): @@ -140,7 +148,6 @@ def main(opts, forwarded_opts): if opts.select == "default": selected_version = DEFAULT_VERSION elif opts.select is not None: - check_version(opts.select) selected_version = opts.select else: selected_version = current_version or DEFAULT_VERSION @@ -153,7 +160,10 @@ def main(opts, forwarded_opts): return if opts.version: if opts.tool == "kotlinc": - print(f"info: kotlinc-jvm {selected_version} (codeql dev wrapper)", file=sys.stderr) + print( + f"info: kotlinc-jvm {selected_version} (codeql dev wrapper)", + file=sys.stderr, + ) return forwarded_opts.append("-version") diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java index 0b4b2a829fb6..2edfbb3e1647 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java @@ -50,10 +50,6 @@ public enum Var { * The location of any caches used by the toolchain, including compilation caches, trap caches, etc. */ SEMMLE_CACHE, - /** - * The location of the toolchain files, including the odasa jar, our queries etc. - */ - SEMMLE_DIST, /** * If running from a git tree, the root of the tree. */ diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt index 10df392f8b12..3be94d65690f 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt @@ -1511,6 +1511,8 @@ open class KotlinUsesExtractor( } } } + is IrDynamicType -> {} + is IrErrorType -> {} } return t } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_20-Beta2/getKotlinType.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_20-Beta2/getKotlinType.kt new file mode 100644 index 000000000000..37fb2a700410 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_20-Beta2/getKotlinType.kt @@ -0,0 +1,5 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.ir.types.IrSimpleType + +fun getKotlinType(s: IrSimpleType) = s.originalKotlinType diff --git a/java/kotlin-extractor/versions.bzl b/java/kotlin-extractor/versions.bzl index 728672ead6de..e124d6e150a7 100644 --- a/java/kotlin-extractor/versions.bzl +++ b/java/kotlin-extractor/versions.bzl @@ -12,6 +12,7 @@ VERSIONS = [ "1.9.0-Beta", "1.9.20-Beta", "2.0.0-RC1", + "2.0.20-Beta2", ] def _version_to_tuple(v): diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 6e2e78d0a637..7ef174ca56a5 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/1.0.4.md b/java/ql/automodel/src/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index de3831046f15..096cba6156aa 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 1.0.3 +version: 1.0.4 groups: - java - automodel diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/pom.xml b/java/ql/integration-tests/all-platforms/java/maven-enforcer/pom.xml new file mode 100644 index 000000000000..ca376ad5ba9d --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/pom.xml @@ -0,0 +1,133 @@ + + + + 4.0.0 + + com.example + maven-sample + 1.0-SNAPSHOT + + maven-sample + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + + + + + exec-maven-plugin + org.codehaus.mojo + 1.1.1 + + + check-maven-version + package + + java + + + + + com.example.App + + + + com.diffplug.spotless + spotless-maven-plugin + 2.19.1 + + + + check + + compile + + + + + + /* FAIL ME */ + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-maven + + enforce + + + + + [3.1.1,) + + + + + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/java/com/example/App.java b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/java/com/example/App.java new file mode 100644 index 000000000000..c9eec918587c --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/java/com/example/App.java @@ -0,0 +1,30 @@ +package com.example; + +import java.util.regex.Pattern; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + String expectedVersion = System.getenv("EXPECT_MAVEN"); + Path mavenHome = Paths.get(System.getProperty("maven.home")).normalize(); + String observedVersion = mavenHome.getFileName().toString(); + if (expectedVersion != null && !expectedVersion.equals(observedVersion)) { + System.err.println("Wrong maven version, expected '" + expectedVersion + "' but got '" + observedVersion + "'" + mavenHome); + System.exit(1); + } + String commandMatcher = System.getenv("EXPECT_COMMAND_REGEX"); + String command = System.getProperty("sun.java.command"); + if (commandMatcher != null && !Pattern.matches(commandMatcher, command)) { + System.err.println("Wrong command line, '" + command + "' does not match '" + commandMatcher + "'"); + System.exit(1); + } + } +} diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/my-app.properties b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/my-app.properties new file mode 100644 index 000000000000..e566b49a29a8 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/my-app.properties @@ -0,0 +1 @@ +version=1.0 diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/page.xml b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/page.xml new file mode 100644 index 000000000000..2bab459cb031 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/page.xml @@ -0,0 +1,8 @@ + + +A sample + + +

Hello world!

+ + diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/struts.xml b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/struts.xml new file mode 100644 index 000000000000..73fc0c6b9cb6 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/main/resources/struts.xml @@ -0,0 +1,4 @@ + + +This is a sample file + diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/test/java/com/example/AppTest.java new file mode 100644 index 000000000000..22a94ca6f01c --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/src/test/java/com/example/AppTest.java @@ -0,0 +1,20 @@ +package com.example; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.expected b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.expected new file mode 100644 index 000000000000..fc706ca445aa --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.expected @@ -0,0 +1,15 @@ +#select +| src/main/java/com/example/App.java:0:0:0:0 | App | +| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | +xmlFiles +| pom.xml:0:0:0:0 | pom.xml | +| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | +| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | +| target/classes/page.xml:0:0:0:0 | target/classes/page.xml | +| target/classes/struts.xml:0:0:0:0 | target/classes/struts.xml | +propertiesFiles +| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | +| target/classes/my-app.properties:0:0:0:0 | target/classes/my-app.properties | +| target/maven-archiver/pom.properties:0:0:0:0 | target/maven-archiver/pom.properties | +| test-db/log/ext/javac-1.properties:0:0:0:0 | test-db/log/ext/javac-1.properties | +| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py new file mode 100644 index 000000000000..ab8845cbd731 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.py @@ -0,0 +1,5 @@ +import sys + +from create_database_utils import * + +run_codeql_database_create([], lang="java") diff --git a/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.ql b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.ql new file mode 100644 index 000000000000..25cd26fdd142 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/maven-enforcer/test.ql @@ -0,0 +1,9 @@ +import java + +from File f +where f.isSourceFile() +select f + +query predicate xmlFiles(XmlFile x) { any() } + +query predicate propertiesFiles(File f) { f.getExtension() = "properties" } diff --git a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/diagnostics.expected b/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/diagnostics.expected index 3cb70963c893..4f7b421d600c 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/kotlin/diagnostics/kotlin-version-too-new/diagnostics.expected @@ -1,5 +1,5 @@ { - "markdownMessage": "The Kotlin version installed (`999.999.999`) is too recent for this version of CodeQL. Install a version lower than 2.0.10.", + "markdownMessage": "The Kotlin version installed (`999.999.999`) is too recent for this version of CodeQL. Install a version lower than 2.0.30.", "severity": "error", "source": { "extractorName": "java", diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index d4ceec95093c..07b324f259c5 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,24 @@ +## 2.0.0 + +### Breaking Changes + +* The Java extractor no longer supports the `SEMMLE_DIST` legacy environment variable. + +### Deprecated APIs + +* The predicate `isAndroid` from the module `semmle.code.java.security.AndroidCertificatePinningQuery` has been deprecated. Use `semmle.code.java.frameworks.android.Android::inAndroidApplication(File)` instead. + +### New Features + +* Kotlin support is now out of beta, and generally available +* Kotlin versions up to 2.0.2*x* are now supported. + +### Minor Analysis Improvements + +* Added a path-injection sink for `hudson.FilePath.exists()`. +* Added summary models for `org.apache.commons.io.IOUtils.toByteArray`. +* Java build-mode `none` analyses now only report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. + ## 1.1.2 ### Minor Analysis Improvements diff --git a/java/ql/lib/change-notes/2024-06-25-java-tools-status.md b/java/ql/lib/change-notes/2024-06-25-java-tools-status.md deleted file mode 100644 index 67a72a12bb73..000000000000 --- a/java/ql/lib/change-notes/2024-06-25-java-tools-status.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Java build-mode `none` analyses now only report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. diff --git a/java/ql/lib/change-notes/released/2.0.0.md b/java/ql/lib/change-notes/released/2.0.0.md new file mode 100644 index 000000000000..3f451d0e5bba --- /dev/null +++ b/java/ql/lib/change-notes/released/2.0.0.md @@ -0,0 +1,20 @@ +## 2.0.0 + +### Breaking Changes + +* The Java extractor no longer supports the `SEMMLE_DIST` legacy environment variable. + +### Deprecated APIs + +* The predicate `isAndroid` from the module `semmle.code.java.security.AndroidCertificatePinningQuery` has been deprecated. Use `semmle.code.java.frameworks.android.Android::inAndroidApplication(File)` instead. + +### New Features + +* Kotlin support is now out of beta, and generally available +* Kotlin versions up to 2.0.2*x* are now supported. + +### Minor Analysis Improvements + +* Added a path-injection sink for `hudson.FilePath.exists()`. +* Added summary models for `org.apache.commons.io.IOUtils.toByteArray`. +* Java build-mode `none` analyses now only report a warning on the CodeQL status page when there are significant analysis problems-- defined as 5% of expressions lacking a type, or 5% of call targets being unknown. Other messages reported on the status page are downgraded from warnings to notes and so are less prominent, but are still available for review. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 53ab127707fc..0abe6ccede0f 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 2.0.0 diff --git a/java/ql/lib/ext/hudson.model.yml b/java/ql/lib/ext/hudson.model.yml index f83a2bae6b3a..eda30b6a0ff7 100644 --- a/java/ql/lib/ext/hudson.model.yml +++ b/java/ql/lib/ext/hudson.model.yml @@ -19,6 +19,7 @@ extensions: - ["hudson", "FilePath", True, "copyTo", "(FilePath)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson", "FilePath", True, "copyToWithPermission", "", "", "Argument[this]", "path-injection", "manual"] - ["hudson", "FilePath", True, "copyToWithPermission", "(FilePath)", "", "Argument[0]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "exists", "()", "", "Argument[this]", "path-injection", "manual"] - ["hudson", "FilePath", True, "installIfNecessaryFrom", "(URL,TaskListener,String)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["hudson", "FilePath", True, "newInputStreamDenyingSymlinkAsNeeded", "(File,String,boolean)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson", "FilePath", True, "openInputStream", "(File,OpenOption[])", "", "Argument[0]", "path-injection", "manual"] diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 2be5585d82f4..c0c0905a7a43 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -91,9 +91,6 @@ extensions: - ["java.lang", "Iterable", True, "iterator", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["java.lang", "Iterable", True, "spliterator", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["java.lang", "NullPointerException", False, "NullPointerException", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - - ["java.lang", "Object", True, "clone", "", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - - ["java.lang", "Object", True, "clone", "", "", "Argument[this].MapKey", "ReturnValue.MapKey", "value", "manual"] - - ["java.lang", "Object", True, "clone", "", "", "Argument[this].MapValue", "ReturnValue.MapValue", "value", "manual"] - ["java.lang", "RuntimeException", False, "RuntimeException", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - ["java.lang", "RuntimeException", False, "RuntimeException", "(String,Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - ["java.lang", "RuntimeException", False, "RuntimeException", "(String,Throwable)", "", "Argument[1]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "manual"] diff --git a/java/ql/lib/ext/org.apache.commons.io.model.yml b/java/ql/lib/ext/org.apache.commons.io.model.yml index c8002cb3f855..9c75ce8b41ad 100644 --- a/java/ql/lib/ext/org.apache.commons.io.model.yml +++ b/java/ql/lib/ext/org.apache.commons.io.model.yml @@ -10,8 +10,16 @@ extensions: # Note that if a callable has any handwritten summary, all generated summaries # will be ignored for that callable. - ["org.apache.commons.io", "IOUtils", False, "toBufferedInputStream", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(InputStream,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(InputStream,long)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(Reader)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(Reader,Charset)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(Reader,String)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(String)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(URLConnection)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["org.apache.commons.io", "IOUtils", True, "writeLines", "(Collection,String,Writer)", "", "Argument[0].Element", "Argument[2]", "taint", "manual"] - ["org.apache.commons.io", "IOUtils", True, "writeLines", "(Collection,String,Writer)", "", "Argument[1]", "Argument[2]", "taint", "manual"] - addsTo: diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 73f379d3c468..4b4e8a3045b2 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 1.1.2 +version: 2.0.0 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll index 5693e2deaef3..95b2baeab1ce 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll @@ -22,6 +22,8 @@ module JavaDataFlow implements InputSig { predicate getSecondLevelScope = Private::getSecondLevelScope/1; + predicate validParameterAliasStep = Private::validParameterAliasStep/2; + predicate mayBenefitFromCallContext = Private::mayBenefitFromCallContext/1; predicate viableImplInCallContext = Private::viableImplInCallContext/2; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index ee82eca492dc..c1fc51bff049 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -258,6 +258,8 @@ private predicate simpleLocalFlowStep0(Node node1, Node node2, string model) { model = "ValuePreservingMethod" ) or + cloneStep(node1, node2) and model = "CloneStep" + or FlowSummaryImpl::Private::Steps::summaryLocalStep(node1.(FlowSummaryNode).getSummaryNode(), node2.(FlowSummaryNode).getSummaryNode(), true, model) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index 8c731f144633..47db4f825c47 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -316,9 +316,6 @@ private predicate qualifierToMethodStep(Expr tracked, MethodCall sink, string mo * Methods that return tainted data when called on tainted data. */ private predicate taintPreservingQualifierToMethod(Method m, string model) { - model = "" and - m instanceof CloneMethod - or model = "%StringWriter" and m.getDeclaringType().getQualifiedName().matches("%StringWriter") and ( diff --git a/java/ql/lib/semmle/code/java/frameworks/Jndi.qll b/java/ql/lib/semmle/code/java/frameworks/Jndi.qll index b52a280e964e..267cdcd59dc8 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jndi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jndi.qll @@ -44,8 +44,12 @@ class MethodLdapNameAddAll extends Method { } } -/** A method with the name `clone` declared in `javax.naming.ldap.LdapName`. */ -class MethodLdapNameClone extends Method { +/** + * DEPRECATED: No longer needed as clone steps are handled uniformly. + * + * A method with the name `clone` declared in `javax.naming.ldap.LdapName`. + */ +deprecated class MethodLdapNameClone extends Method { MethodLdapNameClone() { this.getDeclaringType() instanceof TypeLdapName and this.hasName("clone") diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll index 1a992eb5565d..befcc036205e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll @@ -5,6 +5,20 @@ import java private import semmle.code.xml.AndroidManifest +/** + * Holds if in `file`'s directory or some parent directory there is an `AndroidManifestXmlFile` + * that defines at least one activity, service or contest provider, suggesting this file is + * part of an android application. + */ +predicate inAndroidApplication(File file) { + file.isSourceFile() and + exists(AndroidManifestXmlFile amxf, Folder amxfDir | + amxf.definesAndroidApplication() and amxfDir = amxf.getParentContainer() + | + file.getParentContainer+() = amxfDir + ) +} + /** * Gets a reflexive/transitive superType */ diff --git a/java/ql/lib/semmle/code/java/security/AndroidCertificatePinningQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidCertificatePinningQuery.qll index 423df0685447..81c02e832760 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidCertificatePinningQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidCertificatePinningQuery.qll @@ -6,6 +6,7 @@ import semmle.code.java.dataflow.TaintTracking import semmle.code.java.frameworks.Networking import semmle.code.java.security.Encryption import semmle.code.java.security.HttpsUrls +private import semmle.code.java.frameworks.android.Android /** An Android Network Security Configuration XML file. */ class AndroidNetworkSecurityConfigFile extends XmlFile { @@ -19,8 +20,12 @@ class AndroidNetworkSecurityConfigFile extends XmlFile { } } -/** Holds if this database is of an Android application. */ -predicate isAndroid() { exists(AndroidManifestXmlFile m) } +/** + * DEPRECATED. Use `semmle.code.java.frameworks.android.Android::inAndroidApplication` instead. + * + * Holds if this database contains an Android manifest file. + */ +deprecated predicate isAndroid() { exists(AndroidManifestXmlFile m) } /** Holds if the given domain name is trusted by the Network Security Configuration XML file. */ private predicate trustedDomainViaXml(string domainName) { @@ -122,7 +127,7 @@ private module UntrustedUrlFlow = TaintTracking::Global; /** Holds if `node` is a network communication call for which certificate pinning is not implemented. */ predicate missingPinning(MissingPinningSink node, string domain) { - isAndroid() and + inAndroidApplication(node.getLocation().getFile()) and exists(DataFlow::Node src | UntrustedUrlFlow::flow(src, node) | if trustedDomain(_) then domain = getDomain(src.asExpr()) else domain = "" ) diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll index 06fa83813124..98acdbc1c556 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll @@ -6,16 +6,15 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.security.CleartextStorageQuery -import semmle.code.xml.AndroidManifest private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSinks private import semmle.code.java.dataflow.FlowSources +private import semmle.code.java.frameworks.android.Android private class AndroidFilesystemCleartextStorageSink extends CleartextStorageSink { AndroidFilesystemCleartextStorageSink() { filesystemInput(_, this.asExpr()) and - // Make sure we are in an Android application. - exists(AndroidManifestXmlFile manifest) + inAndroidApplication(this.getLocation().getFile()) } } diff --git a/java/ql/lib/semmle/code/java/security/LdapInjection.qll b/java/ql/lib/semmle/code/java/security/LdapInjection.qll index d76d6f5f8572..54c8e28ba63d 100644 --- a/java/ql/lib/semmle/code/java/security/LdapInjection.qll +++ b/java/ql/lib/semmle/code/java/security/LdapInjection.qll @@ -62,7 +62,7 @@ private predicate ldapNameAddAllStep(DataFlow::ExprNode n1, DataFlow::ExprNode n /** * Holds if `n1` to `n2` is a dataflow step that converts between `LdapName` and `LdapName` or - * `String`, i.e. `taintedLdapName.clone()`, `taintedLdapName.getAll()`, + * `String`, i.e. `taintedLdapName.getAll()`, * `taintedLdapName.getRdns()` or `taintedLdapName.toString()`. */ private predicate ldapNameGetCloneStep(DataFlow::ExprNode n1, DataFlow::ExprNode n2) { @@ -71,7 +71,6 @@ private predicate ldapNameGetCloneStep(DataFlow::ExprNode n1, DataFlow::ExprNode n2.asExpr() = ma and ma.getMethod() = m | - m instanceof MethodLdapNameClone or m instanceof MethodLdapNameGetAll or m instanceof MethodLdapNameGetRdns or m instanceof MethodLdapNameToString diff --git a/java/ql/lib/semmle/code/xml/AndroidManifest.qll b/java/ql/lib/semmle/code/xml/AndroidManifest.qll index 44e17f5588af..ad69546a4140 100644 --- a/java/ql/lib/semmle/code/xml/AndroidManifest.qll +++ b/java/ql/lib/semmle/code/xml/AndroidManifest.qll @@ -23,6 +23,21 @@ class AndroidManifestXmlFile extends XmlFile { * Holds if this Android manifest file is located in a build directory. */ predicate isInBuildDirectory() { this.getFile().getRelativePath().matches("%build%") } + + /** + * Holds if this file defines at least one activity, service or contest provider, + * and so it corresponds to an android application rather than a library. + */ + predicate definesAndroidApplication() { + exists(AndroidComponentXmlElement acxe | + this.getManifestElement().getApplicationElement().getAComponentElement() = acxe and + ( + acxe instanceof AndroidActivityXmlElement or + acxe instanceof AndroidServiceXmlElement or + acxe instanceof AndroidProviderXmlElement + ) + ) + } } /** diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 30ac37246bbd..687e54f3d9b5 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.1 + +### Minor Analysis Improvements + +* The heuristic to enable certain Android queries has been improved. Now it ignores Android Manifests which don't define an activity, content provider or service. We also only consider files which are under a folder containing such an Android Manifest for these queries. This should remove some false positive alerts. + ## 1.1.0 ### Major Analysis Improvements diff --git a/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql b/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql index 4bcf99fd4b6b..41d48656fdd3 100644 --- a/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql +++ b/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql @@ -8,6 +8,7 @@ * @id java/non-https-url * @tags security * external/cwe/cwe-319 + * external/cwe/cwe-345 */ import java diff --git a/java/ql/src/change-notes/released/1.1.1.md b/java/ql/src/change-notes/released/1.1.1.md new file mode 100644 index 000000000000..e8403c4e15af --- /dev/null +++ b/java/ql/src/change-notes/released/1.1.1.md @@ -0,0 +1,5 @@ +## 1.1.1 + +### Minor Analysis Improvements + +* The heuristic to enable certain Android queries has been improved. Now it ignores Android Manifests which don't define an activity, content provider or service. We also only consider files which are under a folder containing such an Android Manifest for these queries. This should remove some false positive alerts. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 2ac15439f561..1a19084be3f7 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index c457b2d0f924..66b53f469396 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.0 +version: 1.1.1 groups: - java - queries diff --git a/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected b/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected index b4da62337c4b..faa8daf8ceaf 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected @@ -1,3141 +1,3141 @@ edges -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:38:41:38:48 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2023 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:38:41:38:48 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48028 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:41:70:41:77 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:105:26:105:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2045 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:105:26:105:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48050 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:106:26:106:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2046 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:106:26:106:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48051 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:109:55:109:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:176:41:176:48 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2071 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:176:41:176:48 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48076 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:179:70:179:77 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:243:26:243:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2093 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:243:26:243:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48098 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:244:26:244:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2094 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:244:26:244:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48099 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:247:55:247:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:314:41:314:48 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2118 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:314:41:314:48 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48123 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:317:70:317:77 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:381:26:381:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2140 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:381:26:381:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48145 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:382:26:382:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2141 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:382:26:382:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48146 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:385:55:385:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:452:40:452:47 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2165 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:452:40:452:47 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48170 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:455:69:455:76 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:519:25:519:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2187 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:519:25:519:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48192 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:520:25:520:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2188 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:520:25:520:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48193 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:523:54:523:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:590:53:590:60 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2212 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:590:53:590:60 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48217 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:593:82:593:89 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:657:38:657:45 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2234 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:657:38:657:45 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48239 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:658:38:658:45 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2235 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:658:38:658:45 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48240 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:661:67:661:74 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:728:41:728:48 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2262 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:728:41:728:48 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48267 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:731:70:731:77 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:795:26:795:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2284 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:795:26:795:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48289 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:796:26:796:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2285 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:796:26:796:33 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48290 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:799:55:799:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:866:40:866:47 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2309 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:866:40:866:47 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48323 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:869:69:869:76 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:933:25:933:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2331 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:933:25:933:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48345 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:934:25:934:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2332 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:934:25:934:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48346 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:937:54:937:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1000:59:1000:66 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1002:53:1002:60 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1022:25:1022:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2001 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1022:25:1022:32 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48006 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1025:54:1025:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1026:40:1026:47 | source(...) | provenance | Src:MaD:44686 Sink:MaD:2003 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1026:40:1026:47 | source(...) | provenance | Src:MaD:44686 Sink:MaD:48008 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | provenance | Src:MaD:44686 | -| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | provenance | Src:MaD:44686 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:38:41:38:48 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2023 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:38:41:38:48 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48034 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:41:70:41:77 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:105:26:105:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2045 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:105:26:105:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48056 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:106:26:106:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2046 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:106:26:106:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48057 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:109:55:109:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:176:41:176:48 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2071 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:176:41:176:48 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48082 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:179:70:179:77 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:243:26:243:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2093 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:243:26:243:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48104 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:244:26:244:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2094 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:244:26:244:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48105 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:247:55:247:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:314:41:314:48 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2118 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:314:41:314:48 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48129 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:317:70:317:77 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:381:26:381:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2140 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:381:26:381:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48151 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:382:26:382:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2141 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:382:26:382:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48152 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:385:55:385:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:452:40:452:47 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2165 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:452:40:452:47 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48176 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:455:69:455:76 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:519:25:519:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2187 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:519:25:519:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48198 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:520:25:520:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2188 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:520:25:520:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48199 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:523:54:523:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:590:53:590:60 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2212 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:590:53:590:60 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48223 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:593:82:593:89 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:657:38:657:45 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2234 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:657:38:657:45 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48245 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:658:38:658:45 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2235 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:658:38:658:45 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48246 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:661:67:661:74 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:728:41:728:48 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2262 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:728:41:728:48 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48273 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:731:70:731:77 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:795:26:795:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2284 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:795:26:795:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48295 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:796:26:796:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2285 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:796:26:796:33 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48296 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:799:55:799:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:866:40:866:47 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2309 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:866:40:866:47 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48329 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:869:69:869:76 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:933:25:933:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2331 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:933:25:933:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48351 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:934:25:934:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2332 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:934:25:934:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48352 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:937:54:937:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1000:59:1000:66 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1002:53:1002:60 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1022:25:1022:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2001 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1022:25:1022:32 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48012 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1025:54:1025:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1026:40:1026:47 | source(...) | provenance | Src:MaD:44684 Sink:MaD:2003 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1026:40:1026:47 | source(...) | provenance | Src:MaD:44684 Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | provenance | Src:MaD:44684 | +| Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | provenance | Src:MaD:44684 | | Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | Log4jJndiInjectionTest.java:31:26:31:48 | (...)... | provenance | Sink:MaD:2016 | -| Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | Log4jJndiInjectionTest.java:31:26:31:48 | (...)... | provenance | Sink:MaD:48021 | +| Log4jJndiInjectionTest.java:31:41:31:48 | source(...) : String | Log4jJndiInjectionTest.java:31:26:31:48 | (...)... | provenance | Sink:MaD:48027 | | Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | Log4jJndiInjectionTest.java:32:26:32:48 | (...)... | provenance | Sink:MaD:2017 | -| Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | Log4jJndiInjectionTest.java:32:26:32:48 | (...)... | provenance | Sink:MaD:48022 | +| Log4jJndiInjectionTest.java:32:41:32:48 | source(...) : String | Log4jJndiInjectionTest.java:32:26:32:48 | (...)... | provenance | Sink:MaD:48028 | | Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | Log4jJndiInjectionTest.java:33:41:33:63 | (...)... | provenance | Sink:MaD:2018 | -| Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | Log4jJndiInjectionTest.java:33:41:33:63 | (...)... | provenance | Sink:MaD:48023 | +| Log4jJndiInjectionTest.java:33:56:33:63 | source(...) : String | Log4jJndiInjectionTest.java:33:41:33:63 | (...)... | provenance | Sink:MaD:48029 | | Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | Log4jJndiInjectionTest.java:34:41:34:63 | (...)... | provenance | Sink:MaD:2019 | -| Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | Log4jJndiInjectionTest.java:34:41:34:63 | (...)... | provenance | Sink:MaD:48024 | +| Log4jJndiInjectionTest.java:34:56:34:63 | source(...) : String | Log4jJndiInjectionTest.java:34:41:34:63 | (...)... | provenance | Sink:MaD:48030 | | Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | Log4jJndiInjectionTest.java:35:41:35:58 | (...)... | provenance | Sink:MaD:2020 | -| Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | Log4jJndiInjectionTest.java:35:41:35:58 | (...)... | provenance | Sink:MaD:48025 | +| Log4jJndiInjectionTest.java:35:51:35:58 | source(...) : String | Log4jJndiInjectionTest.java:35:41:35:58 | (...)... | provenance | Sink:MaD:48031 | | Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | Log4jJndiInjectionTest.java:36:41:36:66 | (...)... | provenance | Sink:MaD:2021 | -| Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | Log4jJndiInjectionTest.java:36:41:36:66 | (...)... | provenance | Sink:MaD:48026 | +| Log4jJndiInjectionTest.java:36:59:36:66 | source(...) : String | Log4jJndiInjectionTest.java:36:41:36:66 | (...)... | provenance | Sink:MaD:48032 | | Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | Log4jJndiInjectionTest.java:37:41:37:66 | (...)... | provenance | Sink:MaD:2022 | -| Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | Log4jJndiInjectionTest.java:37:41:37:66 | (...)... | provenance | Sink:MaD:48027 | +| Log4jJndiInjectionTest.java:37:59:37:66 | source(...) : String | Log4jJndiInjectionTest.java:37:41:37:66 | (...)... | provenance | Sink:MaD:48033 | | Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | Log4jJndiInjectionTest.java:39:41:39:57 | (...)... | provenance | Sink:MaD:2025 | -| Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | Log4jJndiInjectionTest.java:39:41:39:57 | (...)... | provenance | Sink:MaD:48030 | +| Log4jJndiInjectionTest.java:39:50:39:57 | source(...) : String | Log4jJndiInjectionTest.java:39:41:39:57 | (...)... | provenance | Sink:MaD:48036 | | Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | Log4jJndiInjectionTest.java:40:41:40:57 | (...)... | provenance | Sink:MaD:2036 | -| Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | Log4jJndiInjectionTest.java:40:41:40:57 | (...)... | provenance | Sink:MaD:48041 | +| Log4jJndiInjectionTest.java:40:50:40:57 | source(...) : String | Log4jJndiInjectionTest.java:40:41:40:57 | (...)... | provenance | Sink:MaD:48047 | | Log4jJndiInjectionTest.java:41:56:41:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:41:56:41:78 | new Object[] | provenance | Sink:MaD:2036 | -| Log4jJndiInjectionTest.java:41:56:41:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:41:56:41:78 | new Object[] | provenance | Sink:MaD:48041 | +| Log4jJndiInjectionTest.java:41:56:41:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:41:56:41:78 | new Object[] | provenance | Sink:MaD:48047 | | Log4jJndiInjectionTest.java:41:70:41:77 | source(...) : String | Log4jJndiInjectionTest.java:41:56:41:78 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | Log4jJndiInjectionTest.java:42:56:42:72 | (...)... | provenance | Sink:MaD:2026 | -| Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | Log4jJndiInjectionTest.java:42:56:42:72 | (...)... | provenance | Sink:MaD:48031 | +| Log4jJndiInjectionTest.java:42:65:42:72 | source(...) : String | Log4jJndiInjectionTest.java:42:56:42:72 | (...)... | provenance | Sink:MaD:48037 | | Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | Log4jJndiInjectionTest.java:43:41:43:57 | (...)... | provenance | Sink:MaD:2026 | -| Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | Log4jJndiInjectionTest.java:43:41:43:57 | (...)... | provenance | Sink:MaD:48031 | +| Log4jJndiInjectionTest.java:43:50:43:57 | source(...) : String | Log4jJndiInjectionTest.java:43:41:43:57 | (...)... | provenance | Sink:MaD:48037 | | Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | Log4jJndiInjectionTest.java:44:71:44:87 | (...)... | provenance | Sink:MaD:2027 | -| Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | Log4jJndiInjectionTest.java:44:71:44:87 | (...)... | provenance | Sink:MaD:48032 | +| Log4jJndiInjectionTest.java:44:80:44:87 | source(...) : String | Log4jJndiInjectionTest.java:44:71:44:87 | (...)... | provenance | Sink:MaD:48038 | | Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | Log4jJndiInjectionTest.java:45:56:45:72 | (...)... | provenance | Sink:MaD:2027 | -| Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | Log4jJndiInjectionTest.java:45:56:45:72 | (...)... | provenance | Sink:MaD:48032 | +| Log4jJndiInjectionTest.java:45:65:45:72 | source(...) : String | Log4jJndiInjectionTest.java:45:56:45:72 | (...)... | provenance | Sink:MaD:48038 | | Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | Log4jJndiInjectionTest.java:46:41:46:57 | (...)... | provenance | Sink:MaD:2027 | -| Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | Log4jJndiInjectionTest.java:46:41:46:57 | (...)... | provenance | Sink:MaD:48032 | +| Log4jJndiInjectionTest.java:46:50:46:57 | source(...) : String | Log4jJndiInjectionTest.java:46:41:46:57 | (...)... | provenance | Sink:MaD:48038 | | Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | Log4jJndiInjectionTest.java:47:86:47:102 | (...)... | provenance | Sink:MaD:2028 | -| Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | Log4jJndiInjectionTest.java:47:86:47:102 | (...)... | provenance | Sink:MaD:48033 | +| Log4jJndiInjectionTest.java:47:95:47:102 | source(...) : String | Log4jJndiInjectionTest.java:47:86:47:102 | (...)... | provenance | Sink:MaD:48039 | | Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | Log4jJndiInjectionTest.java:48:71:48:87 | (...)... | provenance | Sink:MaD:2028 | -| Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | Log4jJndiInjectionTest.java:48:71:48:87 | (...)... | provenance | Sink:MaD:48033 | +| Log4jJndiInjectionTest.java:48:80:48:87 | source(...) : String | Log4jJndiInjectionTest.java:48:71:48:87 | (...)... | provenance | Sink:MaD:48039 | | Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | Log4jJndiInjectionTest.java:49:56:49:72 | (...)... | provenance | Sink:MaD:2028 | -| Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | Log4jJndiInjectionTest.java:49:56:49:72 | (...)... | provenance | Sink:MaD:48033 | +| Log4jJndiInjectionTest.java:49:65:49:72 | source(...) : String | Log4jJndiInjectionTest.java:49:56:49:72 | (...)... | provenance | Sink:MaD:48039 | | Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | Log4jJndiInjectionTest.java:50:41:50:57 | (...)... | provenance | Sink:MaD:2028 | -| Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | Log4jJndiInjectionTest.java:50:41:50:57 | (...)... | provenance | Sink:MaD:48033 | +| Log4jJndiInjectionTest.java:50:50:50:57 | source(...) : String | Log4jJndiInjectionTest.java:50:41:50:57 | (...)... | provenance | Sink:MaD:48039 | | Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | Log4jJndiInjectionTest.java:51:101:51:117 | (...)... | provenance | Sink:MaD:2029 | -| Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | Log4jJndiInjectionTest.java:51:101:51:117 | (...)... | provenance | Sink:MaD:48034 | +| Log4jJndiInjectionTest.java:51:110:51:117 | source(...) : String | Log4jJndiInjectionTest.java:51:101:51:117 | (...)... | provenance | Sink:MaD:48040 | | Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | Log4jJndiInjectionTest.java:52:86:52:102 | (...)... | provenance | Sink:MaD:2029 | -| Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | Log4jJndiInjectionTest.java:52:86:52:102 | (...)... | provenance | Sink:MaD:48034 | +| Log4jJndiInjectionTest.java:52:95:52:102 | source(...) : String | Log4jJndiInjectionTest.java:52:86:52:102 | (...)... | provenance | Sink:MaD:48040 | | Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | Log4jJndiInjectionTest.java:53:71:53:87 | (...)... | provenance | Sink:MaD:2029 | -| Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | Log4jJndiInjectionTest.java:53:71:53:87 | (...)... | provenance | Sink:MaD:48034 | +| Log4jJndiInjectionTest.java:53:80:53:87 | source(...) : String | Log4jJndiInjectionTest.java:53:71:53:87 | (...)... | provenance | Sink:MaD:48040 | | Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | Log4jJndiInjectionTest.java:54:56:54:72 | (...)... | provenance | Sink:MaD:2029 | -| Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | Log4jJndiInjectionTest.java:54:56:54:72 | (...)... | provenance | Sink:MaD:48034 | +| Log4jJndiInjectionTest.java:54:65:54:72 | source(...) : String | Log4jJndiInjectionTest.java:54:56:54:72 | (...)... | provenance | Sink:MaD:48040 | | Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | Log4jJndiInjectionTest.java:55:41:55:57 | (...)... | provenance | Sink:MaD:2029 | -| Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | Log4jJndiInjectionTest.java:55:41:55:57 | (...)... | provenance | Sink:MaD:48034 | +| Log4jJndiInjectionTest.java:55:50:55:57 | source(...) : String | Log4jJndiInjectionTest.java:55:41:55:57 | (...)... | provenance | Sink:MaD:48040 | | Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | Log4jJndiInjectionTest.java:56:116:56:132 | (...)... | provenance | Sink:MaD:2030 | -| Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | Log4jJndiInjectionTest.java:56:116:56:132 | (...)... | provenance | Sink:MaD:48035 | +| Log4jJndiInjectionTest.java:56:125:56:132 | source(...) : String | Log4jJndiInjectionTest.java:56:116:56:132 | (...)... | provenance | Sink:MaD:48041 | | Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | Log4jJndiInjectionTest.java:57:101:57:117 | (...)... | provenance | Sink:MaD:2030 | -| Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | Log4jJndiInjectionTest.java:57:101:57:117 | (...)... | provenance | Sink:MaD:48035 | +| Log4jJndiInjectionTest.java:57:110:57:117 | source(...) : String | Log4jJndiInjectionTest.java:57:101:57:117 | (...)... | provenance | Sink:MaD:48041 | | Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | Log4jJndiInjectionTest.java:58:86:58:102 | (...)... | provenance | Sink:MaD:2030 | -| Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | Log4jJndiInjectionTest.java:58:86:58:102 | (...)... | provenance | Sink:MaD:48035 | +| Log4jJndiInjectionTest.java:58:95:58:102 | source(...) : String | Log4jJndiInjectionTest.java:58:86:58:102 | (...)... | provenance | Sink:MaD:48041 | | Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | Log4jJndiInjectionTest.java:59:71:59:87 | (...)... | provenance | Sink:MaD:2030 | -| Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | Log4jJndiInjectionTest.java:59:71:59:87 | (...)... | provenance | Sink:MaD:48035 | +| Log4jJndiInjectionTest.java:59:80:59:87 | source(...) : String | Log4jJndiInjectionTest.java:59:71:59:87 | (...)... | provenance | Sink:MaD:48041 | | Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | Log4jJndiInjectionTest.java:60:56:60:72 | (...)... | provenance | Sink:MaD:2030 | -| Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | Log4jJndiInjectionTest.java:60:56:60:72 | (...)... | provenance | Sink:MaD:48035 | +| Log4jJndiInjectionTest.java:60:65:60:72 | source(...) : String | Log4jJndiInjectionTest.java:60:56:60:72 | (...)... | provenance | Sink:MaD:48041 | | Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | Log4jJndiInjectionTest.java:61:41:61:57 | (...)... | provenance | Sink:MaD:2030 | -| Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | Log4jJndiInjectionTest.java:61:41:61:57 | (...)... | provenance | Sink:MaD:48035 | +| Log4jJndiInjectionTest.java:61:50:61:57 | source(...) : String | Log4jJndiInjectionTest.java:61:41:61:57 | (...)... | provenance | Sink:MaD:48041 | | Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | Log4jJndiInjectionTest.java:62:131:62:147 | (...)... | provenance | Sink:MaD:2031 | -| Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | Log4jJndiInjectionTest.java:62:131:62:147 | (...)... | provenance | Sink:MaD:48036 | +| Log4jJndiInjectionTest.java:62:140:62:147 | source(...) : String | Log4jJndiInjectionTest.java:62:131:62:147 | (...)... | provenance | Sink:MaD:48042 | | Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | Log4jJndiInjectionTest.java:63:116:63:132 | (...)... | provenance | Sink:MaD:2031 | -| Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | Log4jJndiInjectionTest.java:63:116:63:132 | (...)... | provenance | Sink:MaD:48036 | +| Log4jJndiInjectionTest.java:63:125:63:132 | source(...) : String | Log4jJndiInjectionTest.java:63:116:63:132 | (...)... | provenance | Sink:MaD:48042 | | Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | Log4jJndiInjectionTest.java:64:101:64:117 | (...)... | provenance | Sink:MaD:2031 | -| Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | Log4jJndiInjectionTest.java:64:101:64:117 | (...)... | provenance | Sink:MaD:48036 | +| Log4jJndiInjectionTest.java:64:110:64:117 | source(...) : String | Log4jJndiInjectionTest.java:64:101:64:117 | (...)... | provenance | Sink:MaD:48042 | | Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | Log4jJndiInjectionTest.java:65:86:65:102 | (...)... | provenance | Sink:MaD:2031 | -| Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | Log4jJndiInjectionTest.java:65:86:65:102 | (...)... | provenance | Sink:MaD:48036 | +| Log4jJndiInjectionTest.java:65:95:65:102 | source(...) : String | Log4jJndiInjectionTest.java:65:86:65:102 | (...)... | provenance | Sink:MaD:48042 | | Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | Log4jJndiInjectionTest.java:66:71:66:87 | (...)... | provenance | Sink:MaD:2031 | -| Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | Log4jJndiInjectionTest.java:66:71:66:87 | (...)... | provenance | Sink:MaD:48036 | +| Log4jJndiInjectionTest.java:66:80:66:87 | source(...) : String | Log4jJndiInjectionTest.java:66:71:66:87 | (...)... | provenance | Sink:MaD:48042 | | Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | Log4jJndiInjectionTest.java:67:56:67:72 | (...)... | provenance | Sink:MaD:2031 | -| Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | Log4jJndiInjectionTest.java:67:56:67:72 | (...)... | provenance | Sink:MaD:48036 | +| Log4jJndiInjectionTest.java:67:65:67:72 | source(...) : String | Log4jJndiInjectionTest.java:67:56:67:72 | (...)... | provenance | Sink:MaD:48042 | | Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | Log4jJndiInjectionTest.java:68:41:68:57 | (...)... | provenance | Sink:MaD:2031 | -| Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | Log4jJndiInjectionTest.java:68:41:68:57 | (...)... | provenance | Sink:MaD:48036 | +| Log4jJndiInjectionTest.java:68:50:68:57 | source(...) : String | Log4jJndiInjectionTest.java:68:41:68:57 | (...)... | provenance | Sink:MaD:48042 | | Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | Log4jJndiInjectionTest.java:69:146:69:162 | (...)... | provenance | Sink:MaD:2032 | -| Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | Log4jJndiInjectionTest.java:69:146:69:162 | (...)... | provenance | Sink:MaD:48037 | +| Log4jJndiInjectionTest.java:69:155:69:162 | source(...) : String | Log4jJndiInjectionTest.java:69:146:69:162 | (...)... | provenance | Sink:MaD:48043 | | Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | Log4jJndiInjectionTest.java:70:131:70:147 | (...)... | provenance | Sink:MaD:2032 | -| Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | Log4jJndiInjectionTest.java:70:131:70:147 | (...)... | provenance | Sink:MaD:48037 | +| Log4jJndiInjectionTest.java:70:140:70:147 | source(...) : String | Log4jJndiInjectionTest.java:70:131:70:147 | (...)... | provenance | Sink:MaD:48043 | | Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | Log4jJndiInjectionTest.java:71:116:71:132 | (...)... | provenance | Sink:MaD:2032 | -| Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | Log4jJndiInjectionTest.java:71:116:71:132 | (...)... | provenance | Sink:MaD:48037 | +| Log4jJndiInjectionTest.java:71:125:71:132 | source(...) : String | Log4jJndiInjectionTest.java:71:116:71:132 | (...)... | provenance | Sink:MaD:48043 | | Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | Log4jJndiInjectionTest.java:72:101:72:117 | (...)... | provenance | Sink:MaD:2032 | -| Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | Log4jJndiInjectionTest.java:72:101:72:117 | (...)... | provenance | Sink:MaD:48037 | +| Log4jJndiInjectionTest.java:72:110:72:117 | source(...) : String | Log4jJndiInjectionTest.java:72:101:72:117 | (...)... | provenance | Sink:MaD:48043 | | Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | Log4jJndiInjectionTest.java:73:86:73:102 | (...)... | provenance | Sink:MaD:2032 | -| Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | Log4jJndiInjectionTest.java:73:86:73:102 | (...)... | provenance | Sink:MaD:48037 | +| Log4jJndiInjectionTest.java:73:95:73:102 | source(...) : String | Log4jJndiInjectionTest.java:73:86:73:102 | (...)... | provenance | Sink:MaD:48043 | | Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | Log4jJndiInjectionTest.java:74:71:74:87 | (...)... | provenance | Sink:MaD:2032 | -| Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | Log4jJndiInjectionTest.java:74:71:74:87 | (...)... | provenance | Sink:MaD:48037 | +| Log4jJndiInjectionTest.java:74:80:74:87 | source(...) : String | Log4jJndiInjectionTest.java:74:71:74:87 | (...)... | provenance | Sink:MaD:48043 | | Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | Log4jJndiInjectionTest.java:75:56:75:72 | (...)... | provenance | Sink:MaD:2032 | -| Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | Log4jJndiInjectionTest.java:75:56:75:72 | (...)... | provenance | Sink:MaD:48037 | +| Log4jJndiInjectionTest.java:75:65:75:72 | source(...) : String | Log4jJndiInjectionTest.java:75:56:75:72 | (...)... | provenance | Sink:MaD:48043 | | Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | Log4jJndiInjectionTest.java:76:41:76:57 | (...)... | provenance | Sink:MaD:2032 | -| Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | Log4jJndiInjectionTest.java:76:41:76:57 | (...)... | provenance | Sink:MaD:48037 | +| Log4jJndiInjectionTest.java:76:50:76:57 | source(...) : String | Log4jJndiInjectionTest.java:76:41:76:57 | (...)... | provenance | Sink:MaD:48043 | | Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | Log4jJndiInjectionTest.java:77:161:77:177 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | Log4jJndiInjectionTest.java:77:161:77:177 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:77:170:77:177 | source(...) : String | Log4jJndiInjectionTest.java:77:161:77:177 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | Log4jJndiInjectionTest.java:78:146:78:162 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | Log4jJndiInjectionTest.java:78:146:78:162 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:78:155:78:162 | source(...) : String | Log4jJndiInjectionTest.java:78:146:78:162 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | Log4jJndiInjectionTest.java:79:131:79:147 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | Log4jJndiInjectionTest.java:79:131:79:147 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:79:140:79:147 | source(...) : String | Log4jJndiInjectionTest.java:79:131:79:147 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | Log4jJndiInjectionTest.java:80:116:80:132 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | Log4jJndiInjectionTest.java:80:116:80:132 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:80:125:80:132 | source(...) : String | Log4jJndiInjectionTest.java:80:116:80:132 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | Log4jJndiInjectionTest.java:81:101:81:117 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | Log4jJndiInjectionTest.java:81:101:81:117 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:81:110:81:117 | source(...) : String | Log4jJndiInjectionTest.java:81:101:81:117 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | Log4jJndiInjectionTest.java:82:86:82:102 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | Log4jJndiInjectionTest.java:82:86:82:102 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:82:95:82:102 | source(...) : String | Log4jJndiInjectionTest.java:82:86:82:102 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | Log4jJndiInjectionTest.java:83:71:83:87 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | Log4jJndiInjectionTest.java:83:71:83:87 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:83:80:83:87 | source(...) : String | Log4jJndiInjectionTest.java:83:71:83:87 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | Log4jJndiInjectionTest.java:84:56:84:72 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | Log4jJndiInjectionTest.java:84:56:84:72 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:84:65:84:72 | source(...) : String | Log4jJndiInjectionTest.java:84:56:84:72 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | Log4jJndiInjectionTest.java:85:41:85:57 | (...)... | provenance | Sink:MaD:2033 | -| Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | Log4jJndiInjectionTest.java:85:41:85:57 | (...)... | provenance | Sink:MaD:48038 | +| Log4jJndiInjectionTest.java:85:50:85:57 | source(...) : String | Log4jJndiInjectionTest.java:85:41:85:57 | (...)... | provenance | Sink:MaD:48044 | | Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | Log4jJndiInjectionTest.java:86:176:86:192 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | Log4jJndiInjectionTest.java:86:176:86:192 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:86:185:86:192 | source(...) : String | Log4jJndiInjectionTest.java:86:176:86:192 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | Log4jJndiInjectionTest.java:87:161:87:177 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | Log4jJndiInjectionTest.java:87:161:87:177 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:87:170:87:177 | source(...) : String | Log4jJndiInjectionTest.java:87:161:87:177 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | Log4jJndiInjectionTest.java:88:146:88:162 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | Log4jJndiInjectionTest.java:88:146:88:162 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:88:155:88:162 | source(...) : String | Log4jJndiInjectionTest.java:88:146:88:162 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | Log4jJndiInjectionTest.java:89:131:89:147 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | Log4jJndiInjectionTest.java:89:131:89:147 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:89:140:89:147 | source(...) : String | Log4jJndiInjectionTest.java:89:131:89:147 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | Log4jJndiInjectionTest.java:90:116:90:132 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | Log4jJndiInjectionTest.java:90:116:90:132 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:90:125:90:132 | source(...) : String | Log4jJndiInjectionTest.java:90:116:90:132 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | Log4jJndiInjectionTest.java:91:101:91:117 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | Log4jJndiInjectionTest.java:91:101:91:117 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:91:110:91:117 | source(...) : String | Log4jJndiInjectionTest.java:91:101:91:117 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | Log4jJndiInjectionTest.java:92:86:92:102 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | Log4jJndiInjectionTest.java:92:86:92:102 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:92:95:92:102 | source(...) : String | Log4jJndiInjectionTest.java:92:86:92:102 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | Log4jJndiInjectionTest.java:93:71:93:87 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | Log4jJndiInjectionTest.java:93:71:93:87 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:93:80:93:87 | source(...) : String | Log4jJndiInjectionTest.java:93:71:93:87 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | Log4jJndiInjectionTest.java:94:56:94:72 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | Log4jJndiInjectionTest.java:94:56:94:72 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:94:65:94:72 | source(...) : String | Log4jJndiInjectionTest.java:94:56:94:72 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | Log4jJndiInjectionTest.java:95:41:95:57 | (...)... | provenance | Sink:MaD:2034 | -| Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | Log4jJndiInjectionTest.java:95:41:95:57 | (...)... | provenance | Sink:MaD:48039 | +| Log4jJndiInjectionTest.java:95:50:95:57 | source(...) : String | Log4jJndiInjectionTest.java:95:41:95:57 | (...)... | provenance | Sink:MaD:48045 | | Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | Log4jJndiInjectionTest.java:96:41:96:57 | (...)... | provenance | Sink:MaD:2026 | -| Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | Log4jJndiInjectionTest.java:96:41:96:57 | (...)... | provenance | Sink:MaD:48031 | +| Log4jJndiInjectionTest.java:96:50:96:57 | source(...) : String | Log4jJndiInjectionTest.java:96:41:96:57 | (...)... | provenance | Sink:MaD:48037 | | Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | Log4jJndiInjectionTest.java:97:56:97:77 | (...)... | provenance | Sink:MaD:2026 | -| Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | Log4jJndiInjectionTest.java:97:56:97:77 | (...)... | provenance | Sink:MaD:48031 | +| Log4jJndiInjectionTest.java:97:70:97:77 | source(...) : String | Log4jJndiInjectionTest.java:97:56:97:77 | (...)... | provenance | Sink:MaD:48037 | | Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | Log4jJndiInjectionTest.java:98:41:98:57 | (...)... | provenance | Sink:MaD:2038 | -| Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | Log4jJndiInjectionTest.java:98:41:98:57 | (...)... | provenance | Sink:MaD:48043 | +| Log4jJndiInjectionTest.java:98:50:98:57 | source(...) : String | Log4jJndiInjectionTest.java:98:41:98:57 | (...)... | provenance | Sink:MaD:48049 | | Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | Log4jJndiInjectionTest.java:99:41:99:62 | (...)... | provenance | Sink:MaD:2039 | -| Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | Log4jJndiInjectionTest.java:99:41:99:62 | (...)... | provenance | Sink:MaD:48044 | +| Log4jJndiInjectionTest.java:99:55:99:62 | source(...) : String | Log4jJndiInjectionTest.java:99:41:99:62 | (...)... | provenance | Sink:MaD:48050 | | Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | Log4jJndiInjectionTest.java:100:41:100:62 | (...)... | provenance | Sink:MaD:2040 | -| Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | Log4jJndiInjectionTest.java:100:41:100:62 | (...)... | provenance | Sink:MaD:48045 | +| Log4jJndiInjectionTest.java:100:55:100:62 | source(...) : String | Log4jJndiInjectionTest.java:100:41:100:62 | (...)... | provenance | Sink:MaD:48051 | | Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | Log4jJndiInjectionTest.java:101:26:101:51 | (...)... | provenance | Sink:MaD:2043 | -| Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | Log4jJndiInjectionTest.java:101:26:101:51 | (...)... | provenance | Sink:MaD:48048 | +| Log4jJndiInjectionTest.java:101:44:101:51 | source(...) : String | Log4jJndiInjectionTest.java:101:26:101:51 | (...)... | provenance | Sink:MaD:48054 | | Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | Log4jJndiInjectionTest.java:102:26:102:51 | (...)... | provenance | Sink:MaD:2044 | -| Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | Log4jJndiInjectionTest.java:102:26:102:51 | (...)... | provenance | Sink:MaD:48049 | +| Log4jJndiInjectionTest.java:102:44:102:51 | source(...) : String | Log4jJndiInjectionTest.java:102:26:102:51 | (...)... | provenance | Sink:MaD:48055 | | Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | Log4jJndiInjectionTest.java:103:26:103:43 | (...)... | provenance | Sink:MaD:2041 | -| Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | Log4jJndiInjectionTest.java:103:26:103:43 | (...)... | provenance | Sink:MaD:48046 | +| Log4jJndiInjectionTest.java:103:36:103:43 | source(...) : String | Log4jJndiInjectionTest.java:103:26:103:43 | (...)... | provenance | Sink:MaD:48052 | | Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | Log4jJndiInjectionTest.java:104:26:104:43 | (...)... | provenance | Sink:MaD:2042 | -| Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | Log4jJndiInjectionTest.java:104:26:104:43 | (...)... | provenance | Sink:MaD:48047 | +| Log4jJndiInjectionTest.java:104:36:104:43 | source(...) : String | Log4jJndiInjectionTest.java:104:26:104:43 | (...)... | provenance | Sink:MaD:48053 | | Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | Log4jJndiInjectionTest.java:107:26:107:42 | (...)... | provenance | Sink:MaD:2047 | -| Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | Log4jJndiInjectionTest.java:107:26:107:42 | (...)... | provenance | Sink:MaD:48052 | +| Log4jJndiInjectionTest.java:107:35:107:42 | source(...) : String | Log4jJndiInjectionTest.java:107:26:107:42 | (...)... | provenance | Sink:MaD:48058 | | Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | Log4jJndiInjectionTest.java:108:26:108:42 | (...)... | provenance | Sink:MaD:2058 | -| Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | Log4jJndiInjectionTest.java:108:26:108:42 | (...)... | provenance | Sink:MaD:48063 | +| Log4jJndiInjectionTest.java:108:35:108:42 | source(...) : String | Log4jJndiInjectionTest.java:108:26:108:42 | (...)... | provenance | Sink:MaD:48069 | | Log4jJndiInjectionTest.java:109:41:109:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:109:41:109:63 | new Object[] | provenance | Sink:MaD:2058 | -| Log4jJndiInjectionTest.java:109:41:109:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:109:41:109:63 | new Object[] | provenance | Sink:MaD:48063 | +| Log4jJndiInjectionTest.java:109:41:109:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:109:41:109:63 | new Object[] | provenance | Sink:MaD:48069 | | Log4jJndiInjectionTest.java:109:55:109:62 | source(...) : String | Log4jJndiInjectionTest.java:109:41:109:63 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | Log4jJndiInjectionTest.java:110:41:110:57 | (...)... | provenance | Sink:MaD:2048 | -| Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | Log4jJndiInjectionTest.java:110:41:110:57 | (...)... | provenance | Sink:MaD:48053 | +| Log4jJndiInjectionTest.java:110:50:110:57 | source(...) : String | Log4jJndiInjectionTest.java:110:41:110:57 | (...)... | provenance | Sink:MaD:48059 | | Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | Log4jJndiInjectionTest.java:111:26:111:42 | (...)... | provenance | Sink:MaD:2048 | -| Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | Log4jJndiInjectionTest.java:111:26:111:42 | (...)... | provenance | Sink:MaD:48053 | +| Log4jJndiInjectionTest.java:111:35:111:42 | source(...) : String | Log4jJndiInjectionTest.java:111:26:111:42 | (...)... | provenance | Sink:MaD:48059 | | Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | Log4jJndiInjectionTest.java:112:56:112:72 | (...)... | provenance | Sink:MaD:2049 | -| Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | Log4jJndiInjectionTest.java:112:56:112:72 | (...)... | provenance | Sink:MaD:48054 | +| Log4jJndiInjectionTest.java:112:65:112:72 | source(...) : String | Log4jJndiInjectionTest.java:112:56:112:72 | (...)... | provenance | Sink:MaD:48060 | | Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | Log4jJndiInjectionTest.java:113:41:113:57 | (...)... | provenance | Sink:MaD:2049 | -| Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | Log4jJndiInjectionTest.java:113:41:113:57 | (...)... | provenance | Sink:MaD:48054 | +| Log4jJndiInjectionTest.java:113:50:113:57 | source(...) : String | Log4jJndiInjectionTest.java:113:41:113:57 | (...)... | provenance | Sink:MaD:48060 | | Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | Log4jJndiInjectionTest.java:114:26:114:42 | (...)... | provenance | Sink:MaD:2049 | -| Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | Log4jJndiInjectionTest.java:114:26:114:42 | (...)... | provenance | Sink:MaD:48054 | +| Log4jJndiInjectionTest.java:114:35:114:42 | source(...) : String | Log4jJndiInjectionTest.java:114:26:114:42 | (...)... | provenance | Sink:MaD:48060 | | Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | Log4jJndiInjectionTest.java:115:71:115:87 | (...)... | provenance | Sink:MaD:2050 | -| Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | Log4jJndiInjectionTest.java:115:71:115:87 | (...)... | provenance | Sink:MaD:48055 | +| Log4jJndiInjectionTest.java:115:80:115:87 | source(...) : String | Log4jJndiInjectionTest.java:115:71:115:87 | (...)... | provenance | Sink:MaD:48061 | | Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | Log4jJndiInjectionTest.java:116:56:116:72 | (...)... | provenance | Sink:MaD:2050 | -| Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | Log4jJndiInjectionTest.java:116:56:116:72 | (...)... | provenance | Sink:MaD:48055 | +| Log4jJndiInjectionTest.java:116:65:116:72 | source(...) : String | Log4jJndiInjectionTest.java:116:56:116:72 | (...)... | provenance | Sink:MaD:48061 | | Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | Log4jJndiInjectionTest.java:117:41:117:57 | (...)... | provenance | Sink:MaD:2050 | -| Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | Log4jJndiInjectionTest.java:117:41:117:57 | (...)... | provenance | Sink:MaD:48055 | +| Log4jJndiInjectionTest.java:117:50:117:57 | source(...) : String | Log4jJndiInjectionTest.java:117:41:117:57 | (...)... | provenance | Sink:MaD:48061 | | Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | Log4jJndiInjectionTest.java:118:26:118:42 | (...)... | provenance | Sink:MaD:2050 | -| Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | Log4jJndiInjectionTest.java:118:26:118:42 | (...)... | provenance | Sink:MaD:48055 | +| Log4jJndiInjectionTest.java:118:35:118:42 | source(...) : String | Log4jJndiInjectionTest.java:118:26:118:42 | (...)... | provenance | Sink:MaD:48061 | | Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | Log4jJndiInjectionTest.java:119:86:119:102 | (...)... | provenance | Sink:MaD:2051 | -| Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | Log4jJndiInjectionTest.java:119:86:119:102 | (...)... | provenance | Sink:MaD:48056 | +| Log4jJndiInjectionTest.java:119:95:119:102 | source(...) : String | Log4jJndiInjectionTest.java:119:86:119:102 | (...)... | provenance | Sink:MaD:48062 | | Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | Log4jJndiInjectionTest.java:120:71:120:87 | (...)... | provenance | Sink:MaD:2051 | -| Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | Log4jJndiInjectionTest.java:120:71:120:87 | (...)... | provenance | Sink:MaD:48056 | +| Log4jJndiInjectionTest.java:120:80:120:87 | source(...) : String | Log4jJndiInjectionTest.java:120:71:120:87 | (...)... | provenance | Sink:MaD:48062 | | Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | Log4jJndiInjectionTest.java:121:56:121:72 | (...)... | provenance | Sink:MaD:2051 | -| Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | Log4jJndiInjectionTest.java:121:56:121:72 | (...)... | provenance | Sink:MaD:48056 | +| Log4jJndiInjectionTest.java:121:65:121:72 | source(...) : String | Log4jJndiInjectionTest.java:121:56:121:72 | (...)... | provenance | Sink:MaD:48062 | | Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | Log4jJndiInjectionTest.java:122:41:122:57 | (...)... | provenance | Sink:MaD:2051 | -| Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | Log4jJndiInjectionTest.java:122:41:122:57 | (...)... | provenance | Sink:MaD:48056 | +| Log4jJndiInjectionTest.java:122:50:122:57 | source(...) : String | Log4jJndiInjectionTest.java:122:41:122:57 | (...)... | provenance | Sink:MaD:48062 | | Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | Log4jJndiInjectionTest.java:123:26:123:42 | (...)... | provenance | Sink:MaD:2051 | -| Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | Log4jJndiInjectionTest.java:123:26:123:42 | (...)... | provenance | Sink:MaD:48056 | +| Log4jJndiInjectionTest.java:123:35:123:42 | source(...) : String | Log4jJndiInjectionTest.java:123:26:123:42 | (...)... | provenance | Sink:MaD:48062 | | Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | Log4jJndiInjectionTest.java:124:101:124:117 | (...)... | provenance | Sink:MaD:2052 | -| Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | Log4jJndiInjectionTest.java:124:101:124:117 | (...)... | provenance | Sink:MaD:48057 | +| Log4jJndiInjectionTest.java:124:110:124:117 | source(...) : String | Log4jJndiInjectionTest.java:124:101:124:117 | (...)... | provenance | Sink:MaD:48063 | | Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | Log4jJndiInjectionTest.java:125:86:125:102 | (...)... | provenance | Sink:MaD:2052 | -| Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | Log4jJndiInjectionTest.java:125:86:125:102 | (...)... | provenance | Sink:MaD:48057 | +| Log4jJndiInjectionTest.java:125:95:125:102 | source(...) : String | Log4jJndiInjectionTest.java:125:86:125:102 | (...)... | provenance | Sink:MaD:48063 | | Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | Log4jJndiInjectionTest.java:126:71:126:87 | (...)... | provenance | Sink:MaD:2052 | -| Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | Log4jJndiInjectionTest.java:126:71:126:87 | (...)... | provenance | Sink:MaD:48057 | +| Log4jJndiInjectionTest.java:126:80:126:87 | source(...) : String | Log4jJndiInjectionTest.java:126:71:126:87 | (...)... | provenance | Sink:MaD:48063 | | Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | Log4jJndiInjectionTest.java:127:56:127:72 | (...)... | provenance | Sink:MaD:2052 | -| Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | Log4jJndiInjectionTest.java:127:56:127:72 | (...)... | provenance | Sink:MaD:48057 | +| Log4jJndiInjectionTest.java:127:65:127:72 | source(...) : String | Log4jJndiInjectionTest.java:127:56:127:72 | (...)... | provenance | Sink:MaD:48063 | | Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | Log4jJndiInjectionTest.java:128:41:128:57 | (...)... | provenance | Sink:MaD:2052 | -| Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | Log4jJndiInjectionTest.java:128:41:128:57 | (...)... | provenance | Sink:MaD:48057 | +| Log4jJndiInjectionTest.java:128:50:128:57 | source(...) : String | Log4jJndiInjectionTest.java:128:41:128:57 | (...)... | provenance | Sink:MaD:48063 | | Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | Log4jJndiInjectionTest.java:129:26:129:42 | (...)... | provenance | Sink:MaD:2052 | -| Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | Log4jJndiInjectionTest.java:129:26:129:42 | (...)... | provenance | Sink:MaD:48057 | +| Log4jJndiInjectionTest.java:129:35:129:42 | source(...) : String | Log4jJndiInjectionTest.java:129:26:129:42 | (...)... | provenance | Sink:MaD:48063 | | Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | Log4jJndiInjectionTest.java:130:116:130:132 | (...)... | provenance | Sink:MaD:2053 | -| Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | Log4jJndiInjectionTest.java:130:116:130:132 | (...)... | provenance | Sink:MaD:48058 | +| Log4jJndiInjectionTest.java:130:125:130:132 | source(...) : String | Log4jJndiInjectionTest.java:130:116:130:132 | (...)... | provenance | Sink:MaD:48064 | | Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | Log4jJndiInjectionTest.java:131:101:131:117 | (...)... | provenance | Sink:MaD:2053 | -| Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | Log4jJndiInjectionTest.java:131:101:131:117 | (...)... | provenance | Sink:MaD:48058 | +| Log4jJndiInjectionTest.java:131:110:131:117 | source(...) : String | Log4jJndiInjectionTest.java:131:101:131:117 | (...)... | provenance | Sink:MaD:48064 | | Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | Log4jJndiInjectionTest.java:132:86:132:102 | (...)... | provenance | Sink:MaD:2053 | -| Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | Log4jJndiInjectionTest.java:132:86:132:102 | (...)... | provenance | Sink:MaD:48058 | +| Log4jJndiInjectionTest.java:132:95:132:102 | source(...) : String | Log4jJndiInjectionTest.java:132:86:132:102 | (...)... | provenance | Sink:MaD:48064 | | Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | Log4jJndiInjectionTest.java:133:71:133:87 | (...)... | provenance | Sink:MaD:2053 | -| Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | Log4jJndiInjectionTest.java:133:71:133:87 | (...)... | provenance | Sink:MaD:48058 | +| Log4jJndiInjectionTest.java:133:80:133:87 | source(...) : String | Log4jJndiInjectionTest.java:133:71:133:87 | (...)... | provenance | Sink:MaD:48064 | | Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | Log4jJndiInjectionTest.java:134:56:134:72 | (...)... | provenance | Sink:MaD:2053 | -| Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | Log4jJndiInjectionTest.java:134:56:134:72 | (...)... | provenance | Sink:MaD:48058 | +| Log4jJndiInjectionTest.java:134:65:134:72 | source(...) : String | Log4jJndiInjectionTest.java:134:56:134:72 | (...)... | provenance | Sink:MaD:48064 | | Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | Log4jJndiInjectionTest.java:135:41:135:57 | (...)... | provenance | Sink:MaD:2053 | -| Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | Log4jJndiInjectionTest.java:135:41:135:57 | (...)... | provenance | Sink:MaD:48058 | +| Log4jJndiInjectionTest.java:135:50:135:57 | source(...) : String | Log4jJndiInjectionTest.java:135:41:135:57 | (...)... | provenance | Sink:MaD:48064 | | Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | Log4jJndiInjectionTest.java:136:26:136:42 | (...)... | provenance | Sink:MaD:2053 | -| Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | Log4jJndiInjectionTest.java:136:26:136:42 | (...)... | provenance | Sink:MaD:48058 | +| Log4jJndiInjectionTest.java:136:35:136:42 | source(...) : String | Log4jJndiInjectionTest.java:136:26:136:42 | (...)... | provenance | Sink:MaD:48064 | | Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | Log4jJndiInjectionTest.java:137:131:137:147 | (...)... | provenance | Sink:MaD:2054 | -| Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | Log4jJndiInjectionTest.java:137:131:137:147 | (...)... | provenance | Sink:MaD:48059 | +| Log4jJndiInjectionTest.java:137:140:137:147 | source(...) : String | Log4jJndiInjectionTest.java:137:131:137:147 | (...)... | provenance | Sink:MaD:48065 | | Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | Log4jJndiInjectionTest.java:138:116:138:132 | (...)... | provenance | Sink:MaD:2054 | -| Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | Log4jJndiInjectionTest.java:138:116:138:132 | (...)... | provenance | Sink:MaD:48059 | +| Log4jJndiInjectionTest.java:138:125:138:132 | source(...) : String | Log4jJndiInjectionTest.java:138:116:138:132 | (...)... | provenance | Sink:MaD:48065 | | Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | Log4jJndiInjectionTest.java:139:101:139:117 | (...)... | provenance | Sink:MaD:2054 | -| Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | Log4jJndiInjectionTest.java:139:101:139:117 | (...)... | provenance | Sink:MaD:48059 | +| Log4jJndiInjectionTest.java:139:110:139:117 | source(...) : String | Log4jJndiInjectionTest.java:139:101:139:117 | (...)... | provenance | Sink:MaD:48065 | | Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | Log4jJndiInjectionTest.java:140:86:140:102 | (...)... | provenance | Sink:MaD:2054 | -| Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | Log4jJndiInjectionTest.java:140:86:140:102 | (...)... | provenance | Sink:MaD:48059 | +| Log4jJndiInjectionTest.java:140:95:140:102 | source(...) : String | Log4jJndiInjectionTest.java:140:86:140:102 | (...)... | provenance | Sink:MaD:48065 | | Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | Log4jJndiInjectionTest.java:141:71:141:87 | (...)... | provenance | Sink:MaD:2054 | -| Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | Log4jJndiInjectionTest.java:141:71:141:87 | (...)... | provenance | Sink:MaD:48059 | +| Log4jJndiInjectionTest.java:141:80:141:87 | source(...) : String | Log4jJndiInjectionTest.java:141:71:141:87 | (...)... | provenance | Sink:MaD:48065 | | Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | Log4jJndiInjectionTest.java:142:56:142:72 | (...)... | provenance | Sink:MaD:2054 | -| Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | Log4jJndiInjectionTest.java:142:56:142:72 | (...)... | provenance | Sink:MaD:48059 | +| Log4jJndiInjectionTest.java:142:65:142:72 | source(...) : String | Log4jJndiInjectionTest.java:142:56:142:72 | (...)... | provenance | Sink:MaD:48065 | | Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | Log4jJndiInjectionTest.java:143:41:143:57 | (...)... | provenance | Sink:MaD:2054 | -| Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | Log4jJndiInjectionTest.java:143:41:143:57 | (...)... | provenance | Sink:MaD:48059 | +| Log4jJndiInjectionTest.java:143:50:143:57 | source(...) : String | Log4jJndiInjectionTest.java:143:41:143:57 | (...)... | provenance | Sink:MaD:48065 | | Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | Log4jJndiInjectionTest.java:144:26:144:42 | (...)... | provenance | Sink:MaD:2054 | -| Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | Log4jJndiInjectionTest.java:144:26:144:42 | (...)... | provenance | Sink:MaD:48059 | +| Log4jJndiInjectionTest.java:144:35:144:42 | source(...) : String | Log4jJndiInjectionTest.java:144:26:144:42 | (...)... | provenance | Sink:MaD:48065 | | Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | Log4jJndiInjectionTest.java:145:146:145:162 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | Log4jJndiInjectionTest.java:145:146:145:162 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:145:155:145:162 | source(...) : String | Log4jJndiInjectionTest.java:145:146:145:162 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | Log4jJndiInjectionTest.java:146:131:146:147 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | Log4jJndiInjectionTest.java:146:131:146:147 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:146:140:146:147 | source(...) : String | Log4jJndiInjectionTest.java:146:131:146:147 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | Log4jJndiInjectionTest.java:147:116:147:132 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | Log4jJndiInjectionTest.java:147:116:147:132 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:147:125:147:132 | source(...) : String | Log4jJndiInjectionTest.java:147:116:147:132 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | Log4jJndiInjectionTest.java:148:101:148:117 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | Log4jJndiInjectionTest.java:148:101:148:117 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:148:110:148:117 | source(...) : String | Log4jJndiInjectionTest.java:148:101:148:117 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | Log4jJndiInjectionTest.java:149:86:149:102 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | Log4jJndiInjectionTest.java:149:86:149:102 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:149:95:149:102 | source(...) : String | Log4jJndiInjectionTest.java:149:86:149:102 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | Log4jJndiInjectionTest.java:150:71:150:87 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | Log4jJndiInjectionTest.java:150:71:150:87 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:150:80:150:87 | source(...) : String | Log4jJndiInjectionTest.java:150:71:150:87 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | Log4jJndiInjectionTest.java:151:56:151:72 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | Log4jJndiInjectionTest.java:151:56:151:72 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:151:65:151:72 | source(...) : String | Log4jJndiInjectionTest.java:151:56:151:72 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | Log4jJndiInjectionTest.java:152:41:152:57 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | Log4jJndiInjectionTest.java:152:41:152:57 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:152:50:152:57 | source(...) : String | Log4jJndiInjectionTest.java:152:41:152:57 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | Log4jJndiInjectionTest.java:153:26:153:42 | (...)... | provenance | Sink:MaD:2055 | -| Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | Log4jJndiInjectionTest.java:153:26:153:42 | (...)... | provenance | Sink:MaD:48060 | +| Log4jJndiInjectionTest.java:153:35:153:42 | source(...) : String | Log4jJndiInjectionTest.java:153:26:153:42 | (...)... | provenance | Sink:MaD:48066 | | Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | Log4jJndiInjectionTest.java:154:161:154:177 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | Log4jJndiInjectionTest.java:154:161:154:177 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:154:170:154:177 | source(...) : String | Log4jJndiInjectionTest.java:154:161:154:177 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | Log4jJndiInjectionTest.java:155:146:155:162 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | Log4jJndiInjectionTest.java:155:146:155:162 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:155:155:155:162 | source(...) : String | Log4jJndiInjectionTest.java:155:146:155:162 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | Log4jJndiInjectionTest.java:156:131:156:147 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | Log4jJndiInjectionTest.java:156:131:156:147 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:156:140:156:147 | source(...) : String | Log4jJndiInjectionTest.java:156:131:156:147 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | Log4jJndiInjectionTest.java:157:116:157:132 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | Log4jJndiInjectionTest.java:157:116:157:132 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:157:125:157:132 | source(...) : String | Log4jJndiInjectionTest.java:157:116:157:132 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | Log4jJndiInjectionTest.java:158:101:158:117 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | Log4jJndiInjectionTest.java:158:101:158:117 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:158:110:158:117 | source(...) : String | Log4jJndiInjectionTest.java:158:101:158:117 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | Log4jJndiInjectionTest.java:159:86:159:102 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | Log4jJndiInjectionTest.java:159:86:159:102 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:159:95:159:102 | source(...) : String | Log4jJndiInjectionTest.java:159:86:159:102 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | Log4jJndiInjectionTest.java:160:71:160:87 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | Log4jJndiInjectionTest.java:160:71:160:87 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:160:80:160:87 | source(...) : String | Log4jJndiInjectionTest.java:160:71:160:87 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | Log4jJndiInjectionTest.java:161:56:161:72 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | Log4jJndiInjectionTest.java:161:56:161:72 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:161:65:161:72 | source(...) : String | Log4jJndiInjectionTest.java:161:56:161:72 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | Log4jJndiInjectionTest.java:162:41:162:57 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | Log4jJndiInjectionTest.java:162:41:162:57 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:162:50:162:57 | source(...) : String | Log4jJndiInjectionTest.java:162:41:162:57 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | Log4jJndiInjectionTest.java:163:26:163:42 | (...)... | provenance | Sink:MaD:2056 | -| Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | Log4jJndiInjectionTest.java:163:26:163:42 | (...)... | provenance | Sink:MaD:48061 | +| Log4jJndiInjectionTest.java:163:35:163:42 | source(...) : String | Log4jJndiInjectionTest.java:163:26:163:42 | (...)... | provenance | Sink:MaD:48067 | | Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | Log4jJndiInjectionTest.java:164:26:164:42 | (...)... | provenance | Sink:MaD:2048 | -| Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | Log4jJndiInjectionTest.java:164:26:164:42 | (...)... | provenance | Sink:MaD:48053 | +| Log4jJndiInjectionTest.java:164:35:164:42 | source(...) : String | Log4jJndiInjectionTest.java:164:26:164:42 | (...)... | provenance | Sink:MaD:48059 | | Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | Log4jJndiInjectionTest.java:165:41:165:62 | (...)... | provenance | Sink:MaD:2048 | -| Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | Log4jJndiInjectionTest.java:165:41:165:62 | (...)... | provenance | Sink:MaD:48053 | +| Log4jJndiInjectionTest.java:165:55:165:62 | source(...) : String | Log4jJndiInjectionTest.java:165:41:165:62 | (...)... | provenance | Sink:MaD:48059 | | Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | Log4jJndiInjectionTest.java:166:26:166:42 | (...)... | provenance | Sink:MaD:2060 | -| Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | Log4jJndiInjectionTest.java:166:26:166:42 | (...)... | provenance | Sink:MaD:48065 | +| Log4jJndiInjectionTest.java:166:35:166:42 | source(...) : String | Log4jJndiInjectionTest.java:166:26:166:42 | (...)... | provenance | Sink:MaD:48071 | | Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | Log4jJndiInjectionTest.java:167:26:167:47 | (...)... | provenance | Sink:MaD:2061 | -| Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | Log4jJndiInjectionTest.java:167:26:167:47 | (...)... | provenance | Sink:MaD:48066 | +| Log4jJndiInjectionTest.java:167:40:167:47 | source(...) : String | Log4jJndiInjectionTest.java:167:26:167:47 | (...)... | provenance | Sink:MaD:48072 | | Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | Log4jJndiInjectionTest.java:168:26:168:47 | (...)... | provenance | Sink:MaD:2062 | -| Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | Log4jJndiInjectionTest.java:168:26:168:47 | (...)... | provenance | Sink:MaD:48067 | +| Log4jJndiInjectionTest.java:168:40:168:47 | source(...) : String | Log4jJndiInjectionTest.java:168:26:168:47 | (...)... | provenance | Sink:MaD:48073 | | Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | Log4jJndiInjectionTest.java:169:26:169:48 | (...)... | provenance | Sink:MaD:2064 | -| Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | Log4jJndiInjectionTest.java:169:26:169:48 | (...)... | provenance | Sink:MaD:48069 | +| Log4jJndiInjectionTest.java:169:41:169:48 | source(...) : String | Log4jJndiInjectionTest.java:169:26:169:48 | (...)... | provenance | Sink:MaD:48075 | | Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | Log4jJndiInjectionTest.java:170:26:170:48 | (...)... | provenance | Sink:MaD:2065 | -| Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | Log4jJndiInjectionTest.java:170:26:170:48 | (...)... | provenance | Sink:MaD:48070 | +| Log4jJndiInjectionTest.java:170:41:170:48 | source(...) : String | Log4jJndiInjectionTest.java:170:26:170:48 | (...)... | provenance | Sink:MaD:48076 | | Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | Log4jJndiInjectionTest.java:171:41:171:63 | (...)... | provenance | Sink:MaD:2066 | -| Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | Log4jJndiInjectionTest.java:171:41:171:63 | (...)... | provenance | Sink:MaD:48071 | +| Log4jJndiInjectionTest.java:171:56:171:63 | source(...) : String | Log4jJndiInjectionTest.java:171:41:171:63 | (...)... | provenance | Sink:MaD:48077 | | Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | Log4jJndiInjectionTest.java:172:41:172:63 | (...)... | provenance | Sink:MaD:2067 | -| Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | Log4jJndiInjectionTest.java:172:41:172:63 | (...)... | provenance | Sink:MaD:48072 | +| Log4jJndiInjectionTest.java:172:56:172:63 | source(...) : String | Log4jJndiInjectionTest.java:172:41:172:63 | (...)... | provenance | Sink:MaD:48078 | | Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | Log4jJndiInjectionTest.java:173:41:173:58 | (...)... | provenance | Sink:MaD:2068 | -| Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | Log4jJndiInjectionTest.java:173:41:173:58 | (...)... | provenance | Sink:MaD:48073 | +| Log4jJndiInjectionTest.java:173:51:173:58 | source(...) : String | Log4jJndiInjectionTest.java:173:41:173:58 | (...)... | provenance | Sink:MaD:48079 | | Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | Log4jJndiInjectionTest.java:174:41:174:66 | (...)... | provenance | Sink:MaD:2069 | -| Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | Log4jJndiInjectionTest.java:174:41:174:66 | (...)... | provenance | Sink:MaD:48074 | +| Log4jJndiInjectionTest.java:174:59:174:66 | source(...) : String | Log4jJndiInjectionTest.java:174:41:174:66 | (...)... | provenance | Sink:MaD:48080 | | Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | Log4jJndiInjectionTest.java:175:41:175:66 | (...)... | provenance | Sink:MaD:2070 | -| Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | Log4jJndiInjectionTest.java:175:41:175:66 | (...)... | provenance | Sink:MaD:48075 | +| Log4jJndiInjectionTest.java:175:59:175:66 | source(...) : String | Log4jJndiInjectionTest.java:175:41:175:66 | (...)... | provenance | Sink:MaD:48081 | | Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | Log4jJndiInjectionTest.java:177:41:177:57 | (...)... | provenance | Sink:MaD:2073 | -| Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | Log4jJndiInjectionTest.java:177:41:177:57 | (...)... | provenance | Sink:MaD:48078 | +| Log4jJndiInjectionTest.java:177:50:177:57 | source(...) : String | Log4jJndiInjectionTest.java:177:41:177:57 | (...)... | provenance | Sink:MaD:48084 | | Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | Log4jJndiInjectionTest.java:178:41:178:57 | (...)... | provenance | Sink:MaD:2084 | -| Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | Log4jJndiInjectionTest.java:178:41:178:57 | (...)... | provenance | Sink:MaD:48089 | +| Log4jJndiInjectionTest.java:178:50:178:57 | source(...) : String | Log4jJndiInjectionTest.java:178:41:178:57 | (...)... | provenance | Sink:MaD:48095 | | Log4jJndiInjectionTest.java:179:56:179:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:179:56:179:78 | new Object[] | provenance | Sink:MaD:2084 | -| Log4jJndiInjectionTest.java:179:56:179:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:179:56:179:78 | new Object[] | provenance | Sink:MaD:48089 | +| Log4jJndiInjectionTest.java:179:56:179:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:179:56:179:78 | new Object[] | provenance | Sink:MaD:48095 | | Log4jJndiInjectionTest.java:179:70:179:77 | source(...) : String | Log4jJndiInjectionTest.java:179:56:179:78 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | Log4jJndiInjectionTest.java:180:56:180:72 | (...)... | provenance | Sink:MaD:2074 | -| Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | Log4jJndiInjectionTest.java:180:56:180:72 | (...)... | provenance | Sink:MaD:48079 | +| Log4jJndiInjectionTest.java:180:65:180:72 | source(...) : String | Log4jJndiInjectionTest.java:180:56:180:72 | (...)... | provenance | Sink:MaD:48085 | | Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | Log4jJndiInjectionTest.java:181:41:181:57 | (...)... | provenance | Sink:MaD:2074 | -| Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | Log4jJndiInjectionTest.java:181:41:181:57 | (...)... | provenance | Sink:MaD:48079 | +| Log4jJndiInjectionTest.java:181:50:181:57 | source(...) : String | Log4jJndiInjectionTest.java:181:41:181:57 | (...)... | provenance | Sink:MaD:48085 | | Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | Log4jJndiInjectionTest.java:182:71:182:87 | (...)... | provenance | Sink:MaD:2075 | -| Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | Log4jJndiInjectionTest.java:182:71:182:87 | (...)... | provenance | Sink:MaD:48080 | +| Log4jJndiInjectionTest.java:182:80:182:87 | source(...) : String | Log4jJndiInjectionTest.java:182:71:182:87 | (...)... | provenance | Sink:MaD:48086 | | Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | Log4jJndiInjectionTest.java:183:56:183:72 | (...)... | provenance | Sink:MaD:2075 | -| Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | Log4jJndiInjectionTest.java:183:56:183:72 | (...)... | provenance | Sink:MaD:48080 | +| Log4jJndiInjectionTest.java:183:65:183:72 | source(...) : String | Log4jJndiInjectionTest.java:183:56:183:72 | (...)... | provenance | Sink:MaD:48086 | | Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | Log4jJndiInjectionTest.java:184:41:184:57 | (...)... | provenance | Sink:MaD:2075 | -| Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | Log4jJndiInjectionTest.java:184:41:184:57 | (...)... | provenance | Sink:MaD:48080 | +| Log4jJndiInjectionTest.java:184:50:184:57 | source(...) : String | Log4jJndiInjectionTest.java:184:41:184:57 | (...)... | provenance | Sink:MaD:48086 | | Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | Log4jJndiInjectionTest.java:185:86:185:102 | (...)... | provenance | Sink:MaD:2076 | -| Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | Log4jJndiInjectionTest.java:185:86:185:102 | (...)... | provenance | Sink:MaD:48081 | +| Log4jJndiInjectionTest.java:185:95:185:102 | source(...) : String | Log4jJndiInjectionTest.java:185:86:185:102 | (...)... | provenance | Sink:MaD:48087 | | Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | Log4jJndiInjectionTest.java:186:71:186:87 | (...)... | provenance | Sink:MaD:2076 | -| Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | Log4jJndiInjectionTest.java:186:71:186:87 | (...)... | provenance | Sink:MaD:48081 | +| Log4jJndiInjectionTest.java:186:80:186:87 | source(...) : String | Log4jJndiInjectionTest.java:186:71:186:87 | (...)... | provenance | Sink:MaD:48087 | | Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | Log4jJndiInjectionTest.java:187:56:187:72 | (...)... | provenance | Sink:MaD:2076 | -| Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | Log4jJndiInjectionTest.java:187:56:187:72 | (...)... | provenance | Sink:MaD:48081 | +| Log4jJndiInjectionTest.java:187:65:187:72 | source(...) : String | Log4jJndiInjectionTest.java:187:56:187:72 | (...)... | provenance | Sink:MaD:48087 | | Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | Log4jJndiInjectionTest.java:188:41:188:57 | (...)... | provenance | Sink:MaD:2076 | -| Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | Log4jJndiInjectionTest.java:188:41:188:57 | (...)... | provenance | Sink:MaD:48081 | +| Log4jJndiInjectionTest.java:188:50:188:57 | source(...) : String | Log4jJndiInjectionTest.java:188:41:188:57 | (...)... | provenance | Sink:MaD:48087 | | Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | Log4jJndiInjectionTest.java:189:101:189:117 | (...)... | provenance | Sink:MaD:2077 | -| Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | Log4jJndiInjectionTest.java:189:101:189:117 | (...)... | provenance | Sink:MaD:48082 | +| Log4jJndiInjectionTest.java:189:110:189:117 | source(...) : String | Log4jJndiInjectionTest.java:189:101:189:117 | (...)... | provenance | Sink:MaD:48088 | | Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | Log4jJndiInjectionTest.java:190:86:190:102 | (...)... | provenance | Sink:MaD:2077 | -| Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | Log4jJndiInjectionTest.java:190:86:190:102 | (...)... | provenance | Sink:MaD:48082 | +| Log4jJndiInjectionTest.java:190:95:190:102 | source(...) : String | Log4jJndiInjectionTest.java:190:86:190:102 | (...)... | provenance | Sink:MaD:48088 | | Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | Log4jJndiInjectionTest.java:191:71:191:87 | (...)... | provenance | Sink:MaD:2077 | -| Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | Log4jJndiInjectionTest.java:191:71:191:87 | (...)... | provenance | Sink:MaD:48082 | +| Log4jJndiInjectionTest.java:191:80:191:87 | source(...) : String | Log4jJndiInjectionTest.java:191:71:191:87 | (...)... | provenance | Sink:MaD:48088 | | Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | Log4jJndiInjectionTest.java:192:56:192:72 | (...)... | provenance | Sink:MaD:2077 | -| Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | Log4jJndiInjectionTest.java:192:56:192:72 | (...)... | provenance | Sink:MaD:48082 | +| Log4jJndiInjectionTest.java:192:65:192:72 | source(...) : String | Log4jJndiInjectionTest.java:192:56:192:72 | (...)... | provenance | Sink:MaD:48088 | | Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | Log4jJndiInjectionTest.java:193:41:193:57 | (...)... | provenance | Sink:MaD:2077 | -| Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | Log4jJndiInjectionTest.java:193:41:193:57 | (...)... | provenance | Sink:MaD:48082 | +| Log4jJndiInjectionTest.java:193:50:193:57 | source(...) : String | Log4jJndiInjectionTest.java:193:41:193:57 | (...)... | provenance | Sink:MaD:48088 | | Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | Log4jJndiInjectionTest.java:194:116:194:132 | (...)... | provenance | Sink:MaD:2078 | -| Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | Log4jJndiInjectionTest.java:194:116:194:132 | (...)... | provenance | Sink:MaD:48083 | +| Log4jJndiInjectionTest.java:194:125:194:132 | source(...) : String | Log4jJndiInjectionTest.java:194:116:194:132 | (...)... | provenance | Sink:MaD:48089 | | Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | Log4jJndiInjectionTest.java:195:101:195:117 | (...)... | provenance | Sink:MaD:2078 | -| Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | Log4jJndiInjectionTest.java:195:101:195:117 | (...)... | provenance | Sink:MaD:48083 | +| Log4jJndiInjectionTest.java:195:110:195:117 | source(...) : String | Log4jJndiInjectionTest.java:195:101:195:117 | (...)... | provenance | Sink:MaD:48089 | | Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | Log4jJndiInjectionTest.java:196:86:196:102 | (...)... | provenance | Sink:MaD:2078 | -| Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | Log4jJndiInjectionTest.java:196:86:196:102 | (...)... | provenance | Sink:MaD:48083 | +| Log4jJndiInjectionTest.java:196:95:196:102 | source(...) : String | Log4jJndiInjectionTest.java:196:86:196:102 | (...)... | provenance | Sink:MaD:48089 | | Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | Log4jJndiInjectionTest.java:197:71:197:87 | (...)... | provenance | Sink:MaD:2078 | -| Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | Log4jJndiInjectionTest.java:197:71:197:87 | (...)... | provenance | Sink:MaD:48083 | +| Log4jJndiInjectionTest.java:197:80:197:87 | source(...) : String | Log4jJndiInjectionTest.java:197:71:197:87 | (...)... | provenance | Sink:MaD:48089 | | Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | Log4jJndiInjectionTest.java:198:56:198:72 | (...)... | provenance | Sink:MaD:2078 | -| Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | Log4jJndiInjectionTest.java:198:56:198:72 | (...)... | provenance | Sink:MaD:48083 | +| Log4jJndiInjectionTest.java:198:65:198:72 | source(...) : String | Log4jJndiInjectionTest.java:198:56:198:72 | (...)... | provenance | Sink:MaD:48089 | | Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | Log4jJndiInjectionTest.java:199:41:199:57 | (...)... | provenance | Sink:MaD:2078 | -| Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | Log4jJndiInjectionTest.java:199:41:199:57 | (...)... | provenance | Sink:MaD:48083 | +| Log4jJndiInjectionTest.java:199:50:199:57 | source(...) : String | Log4jJndiInjectionTest.java:199:41:199:57 | (...)... | provenance | Sink:MaD:48089 | | Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | Log4jJndiInjectionTest.java:200:131:200:147 | (...)... | provenance | Sink:MaD:2079 | -| Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | Log4jJndiInjectionTest.java:200:131:200:147 | (...)... | provenance | Sink:MaD:48084 | +| Log4jJndiInjectionTest.java:200:140:200:147 | source(...) : String | Log4jJndiInjectionTest.java:200:131:200:147 | (...)... | provenance | Sink:MaD:48090 | | Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | Log4jJndiInjectionTest.java:201:116:201:132 | (...)... | provenance | Sink:MaD:2079 | -| Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | Log4jJndiInjectionTest.java:201:116:201:132 | (...)... | provenance | Sink:MaD:48084 | +| Log4jJndiInjectionTest.java:201:125:201:132 | source(...) : String | Log4jJndiInjectionTest.java:201:116:201:132 | (...)... | provenance | Sink:MaD:48090 | | Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | Log4jJndiInjectionTest.java:202:101:202:117 | (...)... | provenance | Sink:MaD:2079 | -| Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | Log4jJndiInjectionTest.java:202:101:202:117 | (...)... | provenance | Sink:MaD:48084 | +| Log4jJndiInjectionTest.java:202:110:202:117 | source(...) : String | Log4jJndiInjectionTest.java:202:101:202:117 | (...)... | provenance | Sink:MaD:48090 | | Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | Log4jJndiInjectionTest.java:203:86:203:102 | (...)... | provenance | Sink:MaD:2079 | -| Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | Log4jJndiInjectionTest.java:203:86:203:102 | (...)... | provenance | Sink:MaD:48084 | +| Log4jJndiInjectionTest.java:203:95:203:102 | source(...) : String | Log4jJndiInjectionTest.java:203:86:203:102 | (...)... | provenance | Sink:MaD:48090 | | Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | Log4jJndiInjectionTest.java:204:71:204:87 | (...)... | provenance | Sink:MaD:2079 | -| Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | Log4jJndiInjectionTest.java:204:71:204:87 | (...)... | provenance | Sink:MaD:48084 | +| Log4jJndiInjectionTest.java:204:80:204:87 | source(...) : String | Log4jJndiInjectionTest.java:204:71:204:87 | (...)... | provenance | Sink:MaD:48090 | | Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | Log4jJndiInjectionTest.java:205:56:205:72 | (...)... | provenance | Sink:MaD:2079 | -| Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | Log4jJndiInjectionTest.java:205:56:205:72 | (...)... | provenance | Sink:MaD:48084 | +| Log4jJndiInjectionTest.java:205:65:205:72 | source(...) : String | Log4jJndiInjectionTest.java:205:56:205:72 | (...)... | provenance | Sink:MaD:48090 | | Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | Log4jJndiInjectionTest.java:206:41:206:57 | (...)... | provenance | Sink:MaD:2079 | -| Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | Log4jJndiInjectionTest.java:206:41:206:57 | (...)... | provenance | Sink:MaD:48084 | +| Log4jJndiInjectionTest.java:206:50:206:57 | source(...) : String | Log4jJndiInjectionTest.java:206:41:206:57 | (...)... | provenance | Sink:MaD:48090 | | Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | Log4jJndiInjectionTest.java:207:146:207:162 | (...)... | provenance | Sink:MaD:2080 | -| Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | Log4jJndiInjectionTest.java:207:146:207:162 | (...)... | provenance | Sink:MaD:48085 | +| Log4jJndiInjectionTest.java:207:155:207:162 | source(...) : String | Log4jJndiInjectionTest.java:207:146:207:162 | (...)... | provenance | Sink:MaD:48091 | | Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | Log4jJndiInjectionTest.java:208:131:208:147 | (...)... | provenance | Sink:MaD:2080 | -| Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | Log4jJndiInjectionTest.java:208:131:208:147 | (...)... | provenance | Sink:MaD:48085 | +| Log4jJndiInjectionTest.java:208:140:208:147 | source(...) : String | Log4jJndiInjectionTest.java:208:131:208:147 | (...)... | provenance | Sink:MaD:48091 | | Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | Log4jJndiInjectionTest.java:209:116:209:132 | (...)... | provenance | Sink:MaD:2080 | -| Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | Log4jJndiInjectionTest.java:209:116:209:132 | (...)... | provenance | Sink:MaD:48085 | +| Log4jJndiInjectionTest.java:209:125:209:132 | source(...) : String | Log4jJndiInjectionTest.java:209:116:209:132 | (...)... | provenance | Sink:MaD:48091 | | Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | Log4jJndiInjectionTest.java:210:101:210:117 | (...)... | provenance | Sink:MaD:2080 | -| Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | Log4jJndiInjectionTest.java:210:101:210:117 | (...)... | provenance | Sink:MaD:48085 | +| Log4jJndiInjectionTest.java:210:110:210:117 | source(...) : String | Log4jJndiInjectionTest.java:210:101:210:117 | (...)... | provenance | Sink:MaD:48091 | | Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | Log4jJndiInjectionTest.java:211:86:211:102 | (...)... | provenance | Sink:MaD:2080 | -| Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | Log4jJndiInjectionTest.java:211:86:211:102 | (...)... | provenance | Sink:MaD:48085 | +| Log4jJndiInjectionTest.java:211:95:211:102 | source(...) : String | Log4jJndiInjectionTest.java:211:86:211:102 | (...)... | provenance | Sink:MaD:48091 | | Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | Log4jJndiInjectionTest.java:212:71:212:87 | (...)... | provenance | Sink:MaD:2080 | -| Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | Log4jJndiInjectionTest.java:212:71:212:87 | (...)... | provenance | Sink:MaD:48085 | +| Log4jJndiInjectionTest.java:212:80:212:87 | source(...) : String | Log4jJndiInjectionTest.java:212:71:212:87 | (...)... | provenance | Sink:MaD:48091 | | Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | Log4jJndiInjectionTest.java:213:56:213:72 | (...)... | provenance | Sink:MaD:2080 | -| Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | Log4jJndiInjectionTest.java:213:56:213:72 | (...)... | provenance | Sink:MaD:48085 | +| Log4jJndiInjectionTest.java:213:65:213:72 | source(...) : String | Log4jJndiInjectionTest.java:213:56:213:72 | (...)... | provenance | Sink:MaD:48091 | | Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | Log4jJndiInjectionTest.java:214:41:214:57 | (...)... | provenance | Sink:MaD:2080 | -| Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | Log4jJndiInjectionTest.java:214:41:214:57 | (...)... | provenance | Sink:MaD:48085 | +| Log4jJndiInjectionTest.java:214:50:214:57 | source(...) : String | Log4jJndiInjectionTest.java:214:41:214:57 | (...)... | provenance | Sink:MaD:48091 | | Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | Log4jJndiInjectionTest.java:215:161:215:177 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | Log4jJndiInjectionTest.java:215:161:215:177 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:215:170:215:177 | source(...) : String | Log4jJndiInjectionTest.java:215:161:215:177 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | Log4jJndiInjectionTest.java:216:146:216:162 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | Log4jJndiInjectionTest.java:216:146:216:162 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:216:155:216:162 | source(...) : String | Log4jJndiInjectionTest.java:216:146:216:162 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | Log4jJndiInjectionTest.java:217:131:217:147 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | Log4jJndiInjectionTest.java:217:131:217:147 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:217:140:217:147 | source(...) : String | Log4jJndiInjectionTest.java:217:131:217:147 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | Log4jJndiInjectionTest.java:218:116:218:132 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | Log4jJndiInjectionTest.java:218:116:218:132 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:218:125:218:132 | source(...) : String | Log4jJndiInjectionTest.java:218:116:218:132 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | Log4jJndiInjectionTest.java:219:101:219:117 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | Log4jJndiInjectionTest.java:219:101:219:117 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:219:110:219:117 | source(...) : String | Log4jJndiInjectionTest.java:219:101:219:117 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | Log4jJndiInjectionTest.java:220:86:220:102 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | Log4jJndiInjectionTest.java:220:86:220:102 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:220:95:220:102 | source(...) : String | Log4jJndiInjectionTest.java:220:86:220:102 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | Log4jJndiInjectionTest.java:221:71:221:87 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | Log4jJndiInjectionTest.java:221:71:221:87 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:221:80:221:87 | source(...) : String | Log4jJndiInjectionTest.java:221:71:221:87 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | Log4jJndiInjectionTest.java:222:56:222:72 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | Log4jJndiInjectionTest.java:222:56:222:72 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:222:65:222:72 | source(...) : String | Log4jJndiInjectionTest.java:222:56:222:72 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | Log4jJndiInjectionTest.java:223:41:223:57 | (...)... | provenance | Sink:MaD:2081 | -| Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | Log4jJndiInjectionTest.java:223:41:223:57 | (...)... | provenance | Sink:MaD:48086 | +| Log4jJndiInjectionTest.java:223:50:223:57 | source(...) : String | Log4jJndiInjectionTest.java:223:41:223:57 | (...)... | provenance | Sink:MaD:48092 | | Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | Log4jJndiInjectionTest.java:224:176:224:192 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | Log4jJndiInjectionTest.java:224:176:224:192 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:224:185:224:192 | source(...) : String | Log4jJndiInjectionTest.java:224:176:224:192 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | Log4jJndiInjectionTest.java:225:161:225:177 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | Log4jJndiInjectionTest.java:225:161:225:177 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:225:170:225:177 | source(...) : String | Log4jJndiInjectionTest.java:225:161:225:177 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | Log4jJndiInjectionTest.java:226:146:226:162 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | Log4jJndiInjectionTest.java:226:146:226:162 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:226:155:226:162 | source(...) : String | Log4jJndiInjectionTest.java:226:146:226:162 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | Log4jJndiInjectionTest.java:227:131:227:147 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | Log4jJndiInjectionTest.java:227:131:227:147 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:227:140:227:147 | source(...) : String | Log4jJndiInjectionTest.java:227:131:227:147 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | Log4jJndiInjectionTest.java:228:116:228:132 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | Log4jJndiInjectionTest.java:228:116:228:132 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:228:125:228:132 | source(...) : String | Log4jJndiInjectionTest.java:228:116:228:132 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | Log4jJndiInjectionTest.java:229:101:229:117 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | Log4jJndiInjectionTest.java:229:101:229:117 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:229:110:229:117 | source(...) : String | Log4jJndiInjectionTest.java:229:101:229:117 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | Log4jJndiInjectionTest.java:230:86:230:102 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | Log4jJndiInjectionTest.java:230:86:230:102 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:230:95:230:102 | source(...) : String | Log4jJndiInjectionTest.java:230:86:230:102 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | Log4jJndiInjectionTest.java:231:71:231:87 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | Log4jJndiInjectionTest.java:231:71:231:87 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:231:80:231:87 | source(...) : String | Log4jJndiInjectionTest.java:231:71:231:87 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | Log4jJndiInjectionTest.java:232:56:232:72 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | Log4jJndiInjectionTest.java:232:56:232:72 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:232:65:232:72 | source(...) : String | Log4jJndiInjectionTest.java:232:56:232:72 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | Log4jJndiInjectionTest.java:233:41:233:57 | (...)... | provenance | Sink:MaD:2082 | -| Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | Log4jJndiInjectionTest.java:233:41:233:57 | (...)... | provenance | Sink:MaD:48087 | +| Log4jJndiInjectionTest.java:233:50:233:57 | source(...) : String | Log4jJndiInjectionTest.java:233:41:233:57 | (...)... | provenance | Sink:MaD:48093 | | Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | Log4jJndiInjectionTest.java:234:41:234:57 | (...)... | provenance | Sink:MaD:2074 | -| Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | Log4jJndiInjectionTest.java:234:41:234:57 | (...)... | provenance | Sink:MaD:48079 | +| Log4jJndiInjectionTest.java:234:50:234:57 | source(...) : String | Log4jJndiInjectionTest.java:234:41:234:57 | (...)... | provenance | Sink:MaD:48085 | | Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | Log4jJndiInjectionTest.java:235:56:235:77 | (...)... | provenance | Sink:MaD:2074 | -| Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | Log4jJndiInjectionTest.java:235:56:235:77 | (...)... | provenance | Sink:MaD:48079 | +| Log4jJndiInjectionTest.java:235:70:235:77 | source(...) : String | Log4jJndiInjectionTest.java:235:56:235:77 | (...)... | provenance | Sink:MaD:48085 | | Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | Log4jJndiInjectionTest.java:236:41:236:57 | (...)... | provenance | Sink:MaD:2086 | -| Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | Log4jJndiInjectionTest.java:236:41:236:57 | (...)... | provenance | Sink:MaD:48091 | +| Log4jJndiInjectionTest.java:236:50:236:57 | source(...) : String | Log4jJndiInjectionTest.java:236:41:236:57 | (...)... | provenance | Sink:MaD:48097 | | Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | Log4jJndiInjectionTest.java:237:41:237:62 | (...)... | provenance | Sink:MaD:2087 | -| Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | Log4jJndiInjectionTest.java:237:41:237:62 | (...)... | provenance | Sink:MaD:48092 | +| Log4jJndiInjectionTest.java:237:55:237:62 | source(...) : String | Log4jJndiInjectionTest.java:237:41:237:62 | (...)... | provenance | Sink:MaD:48098 | | Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | Log4jJndiInjectionTest.java:238:41:238:62 | (...)... | provenance | Sink:MaD:2088 | -| Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | Log4jJndiInjectionTest.java:238:41:238:62 | (...)... | provenance | Sink:MaD:48093 | +| Log4jJndiInjectionTest.java:238:55:238:62 | source(...) : String | Log4jJndiInjectionTest.java:238:41:238:62 | (...)... | provenance | Sink:MaD:48099 | | Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | Log4jJndiInjectionTest.java:239:26:239:51 | (...)... | provenance | Sink:MaD:2091 | -| Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | Log4jJndiInjectionTest.java:239:26:239:51 | (...)... | provenance | Sink:MaD:48096 | +| Log4jJndiInjectionTest.java:239:44:239:51 | source(...) : String | Log4jJndiInjectionTest.java:239:26:239:51 | (...)... | provenance | Sink:MaD:48102 | | Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | Log4jJndiInjectionTest.java:240:26:240:51 | (...)... | provenance | Sink:MaD:2092 | -| Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | Log4jJndiInjectionTest.java:240:26:240:51 | (...)... | provenance | Sink:MaD:48097 | +| Log4jJndiInjectionTest.java:240:44:240:51 | source(...) : String | Log4jJndiInjectionTest.java:240:26:240:51 | (...)... | provenance | Sink:MaD:48103 | | Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | Log4jJndiInjectionTest.java:241:26:241:43 | (...)... | provenance | Sink:MaD:2089 | -| Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | Log4jJndiInjectionTest.java:241:26:241:43 | (...)... | provenance | Sink:MaD:48094 | +| Log4jJndiInjectionTest.java:241:36:241:43 | source(...) : String | Log4jJndiInjectionTest.java:241:26:241:43 | (...)... | provenance | Sink:MaD:48100 | | Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | Log4jJndiInjectionTest.java:242:26:242:43 | (...)... | provenance | Sink:MaD:2090 | -| Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | Log4jJndiInjectionTest.java:242:26:242:43 | (...)... | provenance | Sink:MaD:48095 | +| Log4jJndiInjectionTest.java:242:36:242:43 | source(...) : String | Log4jJndiInjectionTest.java:242:26:242:43 | (...)... | provenance | Sink:MaD:48101 | | Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | Log4jJndiInjectionTest.java:245:26:245:42 | (...)... | provenance | Sink:MaD:2095 | -| Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | Log4jJndiInjectionTest.java:245:26:245:42 | (...)... | provenance | Sink:MaD:48100 | +| Log4jJndiInjectionTest.java:245:35:245:42 | source(...) : String | Log4jJndiInjectionTest.java:245:26:245:42 | (...)... | provenance | Sink:MaD:48106 | | Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | Log4jJndiInjectionTest.java:246:26:246:42 | (...)... | provenance | Sink:MaD:2106 | -| Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | Log4jJndiInjectionTest.java:246:26:246:42 | (...)... | provenance | Sink:MaD:48111 | +| Log4jJndiInjectionTest.java:246:35:246:42 | source(...) : String | Log4jJndiInjectionTest.java:246:26:246:42 | (...)... | provenance | Sink:MaD:48117 | | Log4jJndiInjectionTest.java:247:41:247:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:247:41:247:63 | new Object[] | provenance | Sink:MaD:2106 | -| Log4jJndiInjectionTest.java:247:41:247:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:247:41:247:63 | new Object[] | provenance | Sink:MaD:48111 | +| Log4jJndiInjectionTest.java:247:41:247:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:247:41:247:63 | new Object[] | provenance | Sink:MaD:48117 | | Log4jJndiInjectionTest.java:247:55:247:62 | source(...) : String | Log4jJndiInjectionTest.java:247:41:247:63 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | Log4jJndiInjectionTest.java:248:41:248:57 | (...)... | provenance | Sink:MaD:2096 | -| Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | Log4jJndiInjectionTest.java:248:41:248:57 | (...)... | provenance | Sink:MaD:48101 | +| Log4jJndiInjectionTest.java:248:50:248:57 | source(...) : String | Log4jJndiInjectionTest.java:248:41:248:57 | (...)... | provenance | Sink:MaD:48107 | | Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | Log4jJndiInjectionTest.java:249:26:249:42 | (...)... | provenance | Sink:MaD:2096 | -| Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | Log4jJndiInjectionTest.java:249:26:249:42 | (...)... | provenance | Sink:MaD:48101 | +| Log4jJndiInjectionTest.java:249:35:249:42 | source(...) : String | Log4jJndiInjectionTest.java:249:26:249:42 | (...)... | provenance | Sink:MaD:48107 | | Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | Log4jJndiInjectionTest.java:250:56:250:72 | (...)... | provenance | Sink:MaD:2097 | -| Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | Log4jJndiInjectionTest.java:250:56:250:72 | (...)... | provenance | Sink:MaD:48102 | +| Log4jJndiInjectionTest.java:250:65:250:72 | source(...) : String | Log4jJndiInjectionTest.java:250:56:250:72 | (...)... | provenance | Sink:MaD:48108 | | Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | Log4jJndiInjectionTest.java:251:41:251:57 | (...)... | provenance | Sink:MaD:2097 | -| Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | Log4jJndiInjectionTest.java:251:41:251:57 | (...)... | provenance | Sink:MaD:48102 | +| Log4jJndiInjectionTest.java:251:50:251:57 | source(...) : String | Log4jJndiInjectionTest.java:251:41:251:57 | (...)... | provenance | Sink:MaD:48108 | | Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | Log4jJndiInjectionTest.java:252:26:252:42 | (...)... | provenance | Sink:MaD:2097 | -| Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | Log4jJndiInjectionTest.java:252:26:252:42 | (...)... | provenance | Sink:MaD:48102 | +| Log4jJndiInjectionTest.java:252:35:252:42 | source(...) : String | Log4jJndiInjectionTest.java:252:26:252:42 | (...)... | provenance | Sink:MaD:48108 | | Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | Log4jJndiInjectionTest.java:253:71:253:87 | (...)... | provenance | Sink:MaD:2098 | -| Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | Log4jJndiInjectionTest.java:253:71:253:87 | (...)... | provenance | Sink:MaD:48103 | +| Log4jJndiInjectionTest.java:253:80:253:87 | source(...) : String | Log4jJndiInjectionTest.java:253:71:253:87 | (...)... | provenance | Sink:MaD:48109 | | Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | Log4jJndiInjectionTest.java:254:56:254:72 | (...)... | provenance | Sink:MaD:2098 | -| Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | Log4jJndiInjectionTest.java:254:56:254:72 | (...)... | provenance | Sink:MaD:48103 | +| Log4jJndiInjectionTest.java:254:65:254:72 | source(...) : String | Log4jJndiInjectionTest.java:254:56:254:72 | (...)... | provenance | Sink:MaD:48109 | | Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | Log4jJndiInjectionTest.java:255:41:255:57 | (...)... | provenance | Sink:MaD:2098 | -| Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | Log4jJndiInjectionTest.java:255:41:255:57 | (...)... | provenance | Sink:MaD:48103 | +| Log4jJndiInjectionTest.java:255:50:255:57 | source(...) : String | Log4jJndiInjectionTest.java:255:41:255:57 | (...)... | provenance | Sink:MaD:48109 | | Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | Log4jJndiInjectionTest.java:256:26:256:42 | (...)... | provenance | Sink:MaD:2098 | -| Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | Log4jJndiInjectionTest.java:256:26:256:42 | (...)... | provenance | Sink:MaD:48103 | +| Log4jJndiInjectionTest.java:256:35:256:42 | source(...) : String | Log4jJndiInjectionTest.java:256:26:256:42 | (...)... | provenance | Sink:MaD:48109 | | Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | Log4jJndiInjectionTest.java:257:86:257:102 | (...)... | provenance | Sink:MaD:2099 | -| Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | Log4jJndiInjectionTest.java:257:86:257:102 | (...)... | provenance | Sink:MaD:48104 | +| Log4jJndiInjectionTest.java:257:95:257:102 | source(...) : String | Log4jJndiInjectionTest.java:257:86:257:102 | (...)... | provenance | Sink:MaD:48110 | | Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | Log4jJndiInjectionTest.java:258:71:258:87 | (...)... | provenance | Sink:MaD:2099 | -| Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | Log4jJndiInjectionTest.java:258:71:258:87 | (...)... | provenance | Sink:MaD:48104 | +| Log4jJndiInjectionTest.java:258:80:258:87 | source(...) : String | Log4jJndiInjectionTest.java:258:71:258:87 | (...)... | provenance | Sink:MaD:48110 | | Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | Log4jJndiInjectionTest.java:259:56:259:72 | (...)... | provenance | Sink:MaD:2099 | -| Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | Log4jJndiInjectionTest.java:259:56:259:72 | (...)... | provenance | Sink:MaD:48104 | +| Log4jJndiInjectionTest.java:259:65:259:72 | source(...) : String | Log4jJndiInjectionTest.java:259:56:259:72 | (...)... | provenance | Sink:MaD:48110 | | Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | Log4jJndiInjectionTest.java:260:41:260:57 | (...)... | provenance | Sink:MaD:2099 | -| Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | Log4jJndiInjectionTest.java:260:41:260:57 | (...)... | provenance | Sink:MaD:48104 | +| Log4jJndiInjectionTest.java:260:50:260:57 | source(...) : String | Log4jJndiInjectionTest.java:260:41:260:57 | (...)... | provenance | Sink:MaD:48110 | | Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | Log4jJndiInjectionTest.java:261:26:261:42 | (...)... | provenance | Sink:MaD:2099 | -| Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | Log4jJndiInjectionTest.java:261:26:261:42 | (...)... | provenance | Sink:MaD:48104 | +| Log4jJndiInjectionTest.java:261:35:261:42 | source(...) : String | Log4jJndiInjectionTest.java:261:26:261:42 | (...)... | provenance | Sink:MaD:48110 | | Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | Log4jJndiInjectionTest.java:262:101:262:117 | (...)... | provenance | Sink:MaD:2100 | -| Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | Log4jJndiInjectionTest.java:262:101:262:117 | (...)... | provenance | Sink:MaD:48105 | +| Log4jJndiInjectionTest.java:262:110:262:117 | source(...) : String | Log4jJndiInjectionTest.java:262:101:262:117 | (...)... | provenance | Sink:MaD:48111 | | Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | Log4jJndiInjectionTest.java:263:86:263:102 | (...)... | provenance | Sink:MaD:2100 | -| Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | Log4jJndiInjectionTest.java:263:86:263:102 | (...)... | provenance | Sink:MaD:48105 | +| Log4jJndiInjectionTest.java:263:95:263:102 | source(...) : String | Log4jJndiInjectionTest.java:263:86:263:102 | (...)... | provenance | Sink:MaD:48111 | | Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | Log4jJndiInjectionTest.java:264:71:264:87 | (...)... | provenance | Sink:MaD:2100 | -| Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | Log4jJndiInjectionTest.java:264:71:264:87 | (...)... | provenance | Sink:MaD:48105 | +| Log4jJndiInjectionTest.java:264:80:264:87 | source(...) : String | Log4jJndiInjectionTest.java:264:71:264:87 | (...)... | provenance | Sink:MaD:48111 | | Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | Log4jJndiInjectionTest.java:265:56:265:72 | (...)... | provenance | Sink:MaD:2100 | -| Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | Log4jJndiInjectionTest.java:265:56:265:72 | (...)... | provenance | Sink:MaD:48105 | +| Log4jJndiInjectionTest.java:265:65:265:72 | source(...) : String | Log4jJndiInjectionTest.java:265:56:265:72 | (...)... | provenance | Sink:MaD:48111 | | Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | Log4jJndiInjectionTest.java:266:41:266:57 | (...)... | provenance | Sink:MaD:2100 | -| Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | Log4jJndiInjectionTest.java:266:41:266:57 | (...)... | provenance | Sink:MaD:48105 | +| Log4jJndiInjectionTest.java:266:50:266:57 | source(...) : String | Log4jJndiInjectionTest.java:266:41:266:57 | (...)... | provenance | Sink:MaD:48111 | | Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | Log4jJndiInjectionTest.java:267:26:267:42 | (...)... | provenance | Sink:MaD:2100 | -| Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | Log4jJndiInjectionTest.java:267:26:267:42 | (...)... | provenance | Sink:MaD:48105 | +| Log4jJndiInjectionTest.java:267:35:267:42 | source(...) : String | Log4jJndiInjectionTest.java:267:26:267:42 | (...)... | provenance | Sink:MaD:48111 | | Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | Log4jJndiInjectionTest.java:268:116:268:132 | (...)... | provenance | Sink:MaD:2101 | -| Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | Log4jJndiInjectionTest.java:268:116:268:132 | (...)... | provenance | Sink:MaD:48106 | +| Log4jJndiInjectionTest.java:268:125:268:132 | source(...) : String | Log4jJndiInjectionTest.java:268:116:268:132 | (...)... | provenance | Sink:MaD:48112 | | Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | Log4jJndiInjectionTest.java:269:101:269:117 | (...)... | provenance | Sink:MaD:2101 | -| Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | Log4jJndiInjectionTest.java:269:101:269:117 | (...)... | provenance | Sink:MaD:48106 | +| Log4jJndiInjectionTest.java:269:110:269:117 | source(...) : String | Log4jJndiInjectionTest.java:269:101:269:117 | (...)... | provenance | Sink:MaD:48112 | | Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | Log4jJndiInjectionTest.java:270:86:270:102 | (...)... | provenance | Sink:MaD:2101 | -| Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | Log4jJndiInjectionTest.java:270:86:270:102 | (...)... | provenance | Sink:MaD:48106 | +| Log4jJndiInjectionTest.java:270:95:270:102 | source(...) : String | Log4jJndiInjectionTest.java:270:86:270:102 | (...)... | provenance | Sink:MaD:48112 | | Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | Log4jJndiInjectionTest.java:271:71:271:87 | (...)... | provenance | Sink:MaD:2101 | -| Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | Log4jJndiInjectionTest.java:271:71:271:87 | (...)... | provenance | Sink:MaD:48106 | +| Log4jJndiInjectionTest.java:271:80:271:87 | source(...) : String | Log4jJndiInjectionTest.java:271:71:271:87 | (...)... | provenance | Sink:MaD:48112 | | Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | Log4jJndiInjectionTest.java:272:56:272:72 | (...)... | provenance | Sink:MaD:2101 | -| Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | Log4jJndiInjectionTest.java:272:56:272:72 | (...)... | provenance | Sink:MaD:48106 | +| Log4jJndiInjectionTest.java:272:65:272:72 | source(...) : String | Log4jJndiInjectionTest.java:272:56:272:72 | (...)... | provenance | Sink:MaD:48112 | | Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | Log4jJndiInjectionTest.java:273:41:273:57 | (...)... | provenance | Sink:MaD:2101 | -| Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | Log4jJndiInjectionTest.java:273:41:273:57 | (...)... | provenance | Sink:MaD:48106 | +| Log4jJndiInjectionTest.java:273:50:273:57 | source(...) : String | Log4jJndiInjectionTest.java:273:41:273:57 | (...)... | provenance | Sink:MaD:48112 | | Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | Log4jJndiInjectionTest.java:274:26:274:42 | (...)... | provenance | Sink:MaD:2101 | -| Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | Log4jJndiInjectionTest.java:274:26:274:42 | (...)... | provenance | Sink:MaD:48106 | +| Log4jJndiInjectionTest.java:274:35:274:42 | source(...) : String | Log4jJndiInjectionTest.java:274:26:274:42 | (...)... | provenance | Sink:MaD:48112 | | Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | Log4jJndiInjectionTest.java:275:131:275:147 | (...)... | provenance | Sink:MaD:2102 | -| Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | Log4jJndiInjectionTest.java:275:131:275:147 | (...)... | provenance | Sink:MaD:48107 | +| Log4jJndiInjectionTest.java:275:140:275:147 | source(...) : String | Log4jJndiInjectionTest.java:275:131:275:147 | (...)... | provenance | Sink:MaD:48113 | | Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | Log4jJndiInjectionTest.java:276:116:276:132 | (...)... | provenance | Sink:MaD:2102 | -| Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | Log4jJndiInjectionTest.java:276:116:276:132 | (...)... | provenance | Sink:MaD:48107 | +| Log4jJndiInjectionTest.java:276:125:276:132 | source(...) : String | Log4jJndiInjectionTest.java:276:116:276:132 | (...)... | provenance | Sink:MaD:48113 | | Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | Log4jJndiInjectionTest.java:277:101:277:117 | (...)... | provenance | Sink:MaD:2102 | -| Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | Log4jJndiInjectionTest.java:277:101:277:117 | (...)... | provenance | Sink:MaD:48107 | +| Log4jJndiInjectionTest.java:277:110:277:117 | source(...) : String | Log4jJndiInjectionTest.java:277:101:277:117 | (...)... | provenance | Sink:MaD:48113 | | Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | Log4jJndiInjectionTest.java:278:86:278:102 | (...)... | provenance | Sink:MaD:2102 | -| Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | Log4jJndiInjectionTest.java:278:86:278:102 | (...)... | provenance | Sink:MaD:48107 | +| Log4jJndiInjectionTest.java:278:95:278:102 | source(...) : String | Log4jJndiInjectionTest.java:278:86:278:102 | (...)... | provenance | Sink:MaD:48113 | | Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | Log4jJndiInjectionTest.java:279:71:279:87 | (...)... | provenance | Sink:MaD:2102 | -| Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | Log4jJndiInjectionTest.java:279:71:279:87 | (...)... | provenance | Sink:MaD:48107 | +| Log4jJndiInjectionTest.java:279:80:279:87 | source(...) : String | Log4jJndiInjectionTest.java:279:71:279:87 | (...)... | provenance | Sink:MaD:48113 | | Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | Log4jJndiInjectionTest.java:280:56:280:72 | (...)... | provenance | Sink:MaD:2102 | -| Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | Log4jJndiInjectionTest.java:280:56:280:72 | (...)... | provenance | Sink:MaD:48107 | +| Log4jJndiInjectionTest.java:280:65:280:72 | source(...) : String | Log4jJndiInjectionTest.java:280:56:280:72 | (...)... | provenance | Sink:MaD:48113 | | Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | Log4jJndiInjectionTest.java:281:41:281:57 | (...)... | provenance | Sink:MaD:2102 | -| Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | Log4jJndiInjectionTest.java:281:41:281:57 | (...)... | provenance | Sink:MaD:48107 | +| Log4jJndiInjectionTest.java:281:50:281:57 | source(...) : String | Log4jJndiInjectionTest.java:281:41:281:57 | (...)... | provenance | Sink:MaD:48113 | | Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | Log4jJndiInjectionTest.java:282:26:282:42 | (...)... | provenance | Sink:MaD:2102 | -| Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | Log4jJndiInjectionTest.java:282:26:282:42 | (...)... | provenance | Sink:MaD:48107 | +| Log4jJndiInjectionTest.java:282:35:282:42 | source(...) : String | Log4jJndiInjectionTest.java:282:26:282:42 | (...)... | provenance | Sink:MaD:48113 | | Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | Log4jJndiInjectionTest.java:283:146:283:162 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | Log4jJndiInjectionTest.java:283:146:283:162 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:283:155:283:162 | source(...) : String | Log4jJndiInjectionTest.java:283:146:283:162 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | Log4jJndiInjectionTest.java:284:131:284:147 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | Log4jJndiInjectionTest.java:284:131:284:147 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:284:140:284:147 | source(...) : String | Log4jJndiInjectionTest.java:284:131:284:147 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | Log4jJndiInjectionTest.java:285:116:285:132 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | Log4jJndiInjectionTest.java:285:116:285:132 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:285:125:285:132 | source(...) : String | Log4jJndiInjectionTest.java:285:116:285:132 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | Log4jJndiInjectionTest.java:286:101:286:117 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | Log4jJndiInjectionTest.java:286:101:286:117 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:286:110:286:117 | source(...) : String | Log4jJndiInjectionTest.java:286:101:286:117 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | Log4jJndiInjectionTest.java:287:86:287:102 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | Log4jJndiInjectionTest.java:287:86:287:102 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:287:95:287:102 | source(...) : String | Log4jJndiInjectionTest.java:287:86:287:102 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | Log4jJndiInjectionTest.java:288:71:288:87 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | Log4jJndiInjectionTest.java:288:71:288:87 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:288:80:288:87 | source(...) : String | Log4jJndiInjectionTest.java:288:71:288:87 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | Log4jJndiInjectionTest.java:289:56:289:72 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | Log4jJndiInjectionTest.java:289:56:289:72 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:289:65:289:72 | source(...) : String | Log4jJndiInjectionTest.java:289:56:289:72 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | Log4jJndiInjectionTest.java:290:41:290:57 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | Log4jJndiInjectionTest.java:290:41:290:57 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:290:50:290:57 | source(...) : String | Log4jJndiInjectionTest.java:290:41:290:57 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | Log4jJndiInjectionTest.java:291:26:291:42 | (...)... | provenance | Sink:MaD:2103 | -| Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | Log4jJndiInjectionTest.java:291:26:291:42 | (...)... | provenance | Sink:MaD:48108 | +| Log4jJndiInjectionTest.java:291:35:291:42 | source(...) : String | Log4jJndiInjectionTest.java:291:26:291:42 | (...)... | provenance | Sink:MaD:48114 | | Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | Log4jJndiInjectionTest.java:292:161:292:177 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | Log4jJndiInjectionTest.java:292:161:292:177 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:292:170:292:177 | source(...) : String | Log4jJndiInjectionTest.java:292:161:292:177 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | Log4jJndiInjectionTest.java:293:146:293:162 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | Log4jJndiInjectionTest.java:293:146:293:162 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:293:155:293:162 | source(...) : String | Log4jJndiInjectionTest.java:293:146:293:162 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | Log4jJndiInjectionTest.java:294:131:294:147 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | Log4jJndiInjectionTest.java:294:131:294:147 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:294:140:294:147 | source(...) : String | Log4jJndiInjectionTest.java:294:131:294:147 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | Log4jJndiInjectionTest.java:295:116:295:132 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | Log4jJndiInjectionTest.java:295:116:295:132 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:295:125:295:132 | source(...) : String | Log4jJndiInjectionTest.java:295:116:295:132 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | Log4jJndiInjectionTest.java:296:101:296:117 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | Log4jJndiInjectionTest.java:296:101:296:117 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:296:110:296:117 | source(...) : String | Log4jJndiInjectionTest.java:296:101:296:117 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | Log4jJndiInjectionTest.java:297:86:297:102 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | Log4jJndiInjectionTest.java:297:86:297:102 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:297:95:297:102 | source(...) : String | Log4jJndiInjectionTest.java:297:86:297:102 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | Log4jJndiInjectionTest.java:298:71:298:87 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | Log4jJndiInjectionTest.java:298:71:298:87 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:298:80:298:87 | source(...) : String | Log4jJndiInjectionTest.java:298:71:298:87 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | Log4jJndiInjectionTest.java:299:56:299:72 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | Log4jJndiInjectionTest.java:299:56:299:72 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:299:65:299:72 | source(...) : String | Log4jJndiInjectionTest.java:299:56:299:72 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | Log4jJndiInjectionTest.java:300:41:300:57 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | Log4jJndiInjectionTest.java:300:41:300:57 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:300:50:300:57 | source(...) : String | Log4jJndiInjectionTest.java:300:41:300:57 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | Log4jJndiInjectionTest.java:301:26:301:42 | (...)... | provenance | Sink:MaD:2104 | -| Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | Log4jJndiInjectionTest.java:301:26:301:42 | (...)... | provenance | Sink:MaD:48109 | +| Log4jJndiInjectionTest.java:301:35:301:42 | source(...) : String | Log4jJndiInjectionTest.java:301:26:301:42 | (...)... | provenance | Sink:MaD:48115 | | Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | Log4jJndiInjectionTest.java:302:26:302:42 | (...)... | provenance | Sink:MaD:2096 | -| Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | Log4jJndiInjectionTest.java:302:26:302:42 | (...)... | provenance | Sink:MaD:48101 | +| Log4jJndiInjectionTest.java:302:35:302:42 | source(...) : String | Log4jJndiInjectionTest.java:302:26:302:42 | (...)... | provenance | Sink:MaD:48107 | | Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | Log4jJndiInjectionTest.java:303:41:303:62 | (...)... | provenance | Sink:MaD:2096 | -| Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | Log4jJndiInjectionTest.java:303:41:303:62 | (...)... | provenance | Sink:MaD:48101 | +| Log4jJndiInjectionTest.java:303:55:303:62 | source(...) : String | Log4jJndiInjectionTest.java:303:41:303:62 | (...)... | provenance | Sink:MaD:48107 | | Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | Log4jJndiInjectionTest.java:304:26:304:42 | (...)... | provenance | Sink:MaD:2108 | -| Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | Log4jJndiInjectionTest.java:304:26:304:42 | (...)... | provenance | Sink:MaD:48113 | +| Log4jJndiInjectionTest.java:304:35:304:42 | source(...) : String | Log4jJndiInjectionTest.java:304:26:304:42 | (...)... | provenance | Sink:MaD:48119 | | Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | Log4jJndiInjectionTest.java:305:26:305:47 | (...)... | provenance | Sink:MaD:2109 | -| Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | Log4jJndiInjectionTest.java:305:26:305:47 | (...)... | provenance | Sink:MaD:48114 | +| Log4jJndiInjectionTest.java:305:40:305:47 | source(...) : String | Log4jJndiInjectionTest.java:305:26:305:47 | (...)... | provenance | Sink:MaD:48120 | | Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | Log4jJndiInjectionTest.java:306:26:306:47 | (...)... | provenance | Sink:MaD:2110 | -| Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | Log4jJndiInjectionTest.java:306:26:306:47 | (...)... | provenance | Sink:MaD:48115 | +| Log4jJndiInjectionTest.java:306:40:306:47 | source(...) : String | Log4jJndiInjectionTest.java:306:26:306:47 | (...)... | provenance | Sink:MaD:48121 | | Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | Log4jJndiInjectionTest.java:307:26:307:48 | (...)... | provenance | Sink:MaD:2111 | -| Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | Log4jJndiInjectionTest.java:307:26:307:48 | (...)... | provenance | Sink:MaD:48116 | +| Log4jJndiInjectionTest.java:307:41:307:48 | source(...) : String | Log4jJndiInjectionTest.java:307:26:307:48 | (...)... | provenance | Sink:MaD:48122 | | Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | Log4jJndiInjectionTest.java:308:26:308:48 | (...)... | provenance | Sink:MaD:2112 | -| Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | Log4jJndiInjectionTest.java:308:26:308:48 | (...)... | provenance | Sink:MaD:48117 | +| Log4jJndiInjectionTest.java:308:41:308:48 | source(...) : String | Log4jJndiInjectionTest.java:308:26:308:48 | (...)... | provenance | Sink:MaD:48123 | | Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | Log4jJndiInjectionTest.java:309:41:309:63 | (...)... | provenance | Sink:MaD:2113 | -| Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | Log4jJndiInjectionTest.java:309:41:309:63 | (...)... | provenance | Sink:MaD:48118 | +| Log4jJndiInjectionTest.java:309:56:309:63 | source(...) : String | Log4jJndiInjectionTest.java:309:41:309:63 | (...)... | provenance | Sink:MaD:48124 | | Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | Log4jJndiInjectionTest.java:310:41:310:63 | (...)... | provenance | Sink:MaD:2114 | -| Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | Log4jJndiInjectionTest.java:310:41:310:63 | (...)... | provenance | Sink:MaD:48119 | +| Log4jJndiInjectionTest.java:310:56:310:63 | source(...) : String | Log4jJndiInjectionTest.java:310:41:310:63 | (...)... | provenance | Sink:MaD:48125 | | Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | Log4jJndiInjectionTest.java:311:41:311:58 | (...)... | provenance | Sink:MaD:2115 | -| Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | Log4jJndiInjectionTest.java:311:41:311:58 | (...)... | provenance | Sink:MaD:48120 | +| Log4jJndiInjectionTest.java:311:51:311:58 | source(...) : String | Log4jJndiInjectionTest.java:311:41:311:58 | (...)... | provenance | Sink:MaD:48126 | | Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | Log4jJndiInjectionTest.java:312:41:312:66 | (...)... | provenance | Sink:MaD:2116 | -| Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | Log4jJndiInjectionTest.java:312:41:312:66 | (...)... | provenance | Sink:MaD:48121 | +| Log4jJndiInjectionTest.java:312:59:312:66 | source(...) : String | Log4jJndiInjectionTest.java:312:41:312:66 | (...)... | provenance | Sink:MaD:48127 | | Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | Log4jJndiInjectionTest.java:313:41:313:66 | (...)... | provenance | Sink:MaD:2117 | -| Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | Log4jJndiInjectionTest.java:313:41:313:66 | (...)... | provenance | Sink:MaD:48122 | +| Log4jJndiInjectionTest.java:313:59:313:66 | source(...) : String | Log4jJndiInjectionTest.java:313:41:313:66 | (...)... | provenance | Sink:MaD:48128 | | Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | Log4jJndiInjectionTest.java:315:41:315:57 | (...)... | provenance | Sink:MaD:2120 | -| Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | Log4jJndiInjectionTest.java:315:41:315:57 | (...)... | provenance | Sink:MaD:48125 | +| Log4jJndiInjectionTest.java:315:50:315:57 | source(...) : String | Log4jJndiInjectionTest.java:315:41:315:57 | (...)... | provenance | Sink:MaD:48131 | | Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | Log4jJndiInjectionTest.java:316:41:316:57 | (...)... | provenance | Sink:MaD:2131 | -| Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | Log4jJndiInjectionTest.java:316:41:316:57 | (...)... | provenance | Sink:MaD:48136 | +| Log4jJndiInjectionTest.java:316:50:316:57 | source(...) : String | Log4jJndiInjectionTest.java:316:41:316:57 | (...)... | provenance | Sink:MaD:48142 | | Log4jJndiInjectionTest.java:317:56:317:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:317:56:317:78 | new Object[] | provenance | Sink:MaD:2131 | -| Log4jJndiInjectionTest.java:317:56:317:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:317:56:317:78 | new Object[] | provenance | Sink:MaD:48136 | +| Log4jJndiInjectionTest.java:317:56:317:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:317:56:317:78 | new Object[] | provenance | Sink:MaD:48142 | | Log4jJndiInjectionTest.java:317:70:317:77 | source(...) : String | Log4jJndiInjectionTest.java:317:56:317:78 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | Log4jJndiInjectionTest.java:318:56:318:72 | (...)... | provenance | Sink:MaD:2121 | -| Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | Log4jJndiInjectionTest.java:318:56:318:72 | (...)... | provenance | Sink:MaD:48126 | +| Log4jJndiInjectionTest.java:318:65:318:72 | source(...) : String | Log4jJndiInjectionTest.java:318:56:318:72 | (...)... | provenance | Sink:MaD:48132 | | Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | Log4jJndiInjectionTest.java:319:41:319:57 | (...)... | provenance | Sink:MaD:2121 | -| Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | Log4jJndiInjectionTest.java:319:41:319:57 | (...)... | provenance | Sink:MaD:48126 | +| Log4jJndiInjectionTest.java:319:50:319:57 | source(...) : String | Log4jJndiInjectionTest.java:319:41:319:57 | (...)... | provenance | Sink:MaD:48132 | | Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | Log4jJndiInjectionTest.java:320:71:320:87 | (...)... | provenance | Sink:MaD:2122 | -| Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | Log4jJndiInjectionTest.java:320:71:320:87 | (...)... | provenance | Sink:MaD:48127 | +| Log4jJndiInjectionTest.java:320:80:320:87 | source(...) : String | Log4jJndiInjectionTest.java:320:71:320:87 | (...)... | provenance | Sink:MaD:48133 | | Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | Log4jJndiInjectionTest.java:321:56:321:72 | (...)... | provenance | Sink:MaD:2122 | -| Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | Log4jJndiInjectionTest.java:321:56:321:72 | (...)... | provenance | Sink:MaD:48127 | +| Log4jJndiInjectionTest.java:321:65:321:72 | source(...) : String | Log4jJndiInjectionTest.java:321:56:321:72 | (...)... | provenance | Sink:MaD:48133 | | Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | Log4jJndiInjectionTest.java:322:41:322:57 | (...)... | provenance | Sink:MaD:2122 | -| Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | Log4jJndiInjectionTest.java:322:41:322:57 | (...)... | provenance | Sink:MaD:48127 | +| Log4jJndiInjectionTest.java:322:50:322:57 | source(...) : String | Log4jJndiInjectionTest.java:322:41:322:57 | (...)... | provenance | Sink:MaD:48133 | | Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | Log4jJndiInjectionTest.java:323:86:323:102 | (...)... | provenance | Sink:MaD:2123 | -| Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | Log4jJndiInjectionTest.java:323:86:323:102 | (...)... | provenance | Sink:MaD:48128 | +| Log4jJndiInjectionTest.java:323:95:323:102 | source(...) : String | Log4jJndiInjectionTest.java:323:86:323:102 | (...)... | provenance | Sink:MaD:48134 | | Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | Log4jJndiInjectionTest.java:324:71:324:87 | (...)... | provenance | Sink:MaD:2123 | -| Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | Log4jJndiInjectionTest.java:324:71:324:87 | (...)... | provenance | Sink:MaD:48128 | +| Log4jJndiInjectionTest.java:324:80:324:87 | source(...) : String | Log4jJndiInjectionTest.java:324:71:324:87 | (...)... | provenance | Sink:MaD:48134 | | Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | Log4jJndiInjectionTest.java:325:56:325:72 | (...)... | provenance | Sink:MaD:2123 | -| Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | Log4jJndiInjectionTest.java:325:56:325:72 | (...)... | provenance | Sink:MaD:48128 | +| Log4jJndiInjectionTest.java:325:65:325:72 | source(...) : String | Log4jJndiInjectionTest.java:325:56:325:72 | (...)... | provenance | Sink:MaD:48134 | | Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | Log4jJndiInjectionTest.java:326:41:326:57 | (...)... | provenance | Sink:MaD:2123 | -| Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | Log4jJndiInjectionTest.java:326:41:326:57 | (...)... | provenance | Sink:MaD:48128 | +| Log4jJndiInjectionTest.java:326:50:326:57 | source(...) : String | Log4jJndiInjectionTest.java:326:41:326:57 | (...)... | provenance | Sink:MaD:48134 | | Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | Log4jJndiInjectionTest.java:327:101:327:117 | (...)... | provenance | Sink:MaD:2124 | -| Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | Log4jJndiInjectionTest.java:327:101:327:117 | (...)... | provenance | Sink:MaD:48129 | +| Log4jJndiInjectionTest.java:327:110:327:117 | source(...) : String | Log4jJndiInjectionTest.java:327:101:327:117 | (...)... | provenance | Sink:MaD:48135 | | Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | Log4jJndiInjectionTest.java:328:86:328:102 | (...)... | provenance | Sink:MaD:2124 | -| Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | Log4jJndiInjectionTest.java:328:86:328:102 | (...)... | provenance | Sink:MaD:48129 | +| Log4jJndiInjectionTest.java:328:95:328:102 | source(...) : String | Log4jJndiInjectionTest.java:328:86:328:102 | (...)... | provenance | Sink:MaD:48135 | | Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | Log4jJndiInjectionTest.java:329:71:329:87 | (...)... | provenance | Sink:MaD:2124 | -| Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | Log4jJndiInjectionTest.java:329:71:329:87 | (...)... | provenance | Sink:MaD:48129 | +| Log4jJndiInjectionTest.java:329:80:329:87 | source(...) : String | Log4jJndiInjectionTest.java:329:71:329:87 | (...)... | provenance | Sink:MaD:48135 | | Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | Log4jJndiInjectionTest.java:330:56:330:72 | (...)... | provenance | Sink:MaD:2124 | -| Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | Log4jJndiInjectionTest.java:330:56:330:72 | (...)... | provenance | Sink:MaD:48129 | +| Log4jJndiInjectionTest.java:330:65:330:72 | source(...) : String | Log4jJndiInjectionTest.java:330:56:330:72 | (...)... | provenance | Sink:MaD:48135 | | Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | Log4jJndiInjectionTest.java:331:41:331:57 | (...)... | provenance | Sink:MaD:2124 | -| Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | Log4jJndiInjectionTest.java:331:41:331:57 | (...)... | provenance | Sink:MaD:48129 | +| Log4jJndiInjectionTest.java:331:50:331:57 | source(...) : String | Log4jJndiInjectionTest.java:331:41:331:57 | (...)... | provenance | Sink:MaD:48135 | | Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | Log4jJndiInjectionTest.java:332:116:332:132 | (...)... | provenance | Sink:MaD:2125 | -| Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | Log4jJndiInjectionTest.java:332:116:332:132 | (...)... | provenance | Sink:MaD:48130 | +| Log4jJndiInjectionTest.java:332:125:332:132 | source(...) : String | Log4jJndiInjectionTest.java:332:116:332:132 | (...)... | provenance | Sink:MaD:48136 | | Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | Log4jJndiInjectionTest.java:333:101:333:117 | (...)... | provenance | Sink:MaD:2125 | -| Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | Log4jJndiInjectionTest.java:333:101:333:117 | (...)... | provenance | Sink:MaD:48130 | +| Log4jJndiInjectionTest.java:333:110:333:117 | source(...) : String | Log4jJndiInjectionTest.java:333:101:333:117 | (...)... | provenance | Sink:MaD:48136 | | Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | Log4jJndiInjectionTest.java:334:86:334:102 | (...)... | provenance | Sink:MaD:2125 | -| Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | Log4jJndiInjectionTest.java:334:86:334:102 | (...)... | provenance | Sink:MaD:48130 | +| Log4jJndiInjectionTest.java:334:95:334:102 | source(...) : String | Log4jJndiInjectionTest.java:334:86:334:102 | (...)... | provenance | Sink:MaD:48136 | | Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | Log4jJndiInjectionTest.java:335:71:335:87 | (...)... | provenance | Sink:MaD:2125 | -| Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | Log4jJndiInjectionTest.java:335:71:335:87 | (...)... | provenance | Sink:MaD:48130 | +| Log4jJndiInjectionTest.java:335:80:335:87 | source(...) : String | Log4jJndiInjectionTest.java:335:71:335:87 | (...)... | provenance | Sink:MaD:48136 | | Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | Log4jJndiInjectionTest.java:336:56:336:72 | (...)... | provenance | Sink:MaD:2125 | -| Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | Log4jJndiInjectionTest.java:336:56:336:72 | (...)... | provenance | Sink:MaD:48130 | +| Log4jJndiInjectionTest.java:336:65:336:72 | source(...) : String | Log4jJndiInjectionTest.java:336:56:336:72 | (...)... | provenance | Sink:MaD:48136 | | Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | Log4jJndiInjectionTest.java:337:41:337:57 | (...)... | provenance | Sink:MaD:2125 | -| Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | Log4jJndiInjectionTest.java:337:41:337:57 | (...)... | provenance | Sink:MaD:48130 | +| Log4jJndiInjectionTest.java:337:50:337:57 | source(...) : String | Log4jJndiInjectionTest.java:337:41:337:57 | (...)... | provenance | Sink:MaD:48136 | | Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | Log4jJndiInjectionTest.java:338:131:338:147 | (...)... | provenance | Sink:MaD:2126 | -| Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | Log4jJndiInjectionTest.java:338:131:338:147 | (...)... | provenance | Sink:MaD:48131 | +| Log4jJndiInjectionTest.java:338:140:338:147 | source(...) : String | Log4jJndiInjectionTest.java:338:131:338:147 | (...)... | provenance | Sink:MaD:48137 | | Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | Log4jJndiInjectionTest.java:339:116:339:132 | (...)... | provenance | Sink:MaD:2126 | -| Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | Log4jJndiInjectionTest.java:339:116:339:132 | (...)... | provenance | Sink:MaD:48131 | +| Log4jJndiInjectionTest.java:339:125:339:132 | source(...) : String | Log4jJndiInjectionTest.java:339:116:339:132 | (...)... | provenance | Sink:MaD:48137 | | Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | Log4jJndiInjectionTest.java:340:101:340:117 | (...)... | provenance | Sink:MaD:2126 | -| Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | Log4jJndiInjectionTest.java:340:101:340:117 | (...)... | provenance | Sink:MaD:48131 | +| Log4jJndiInjectionTest.java:340:110:340:117 | source(...) : String | Log4jJndiInjectionTest.java:340:101:340:117 | (...)... | provenance | Sink:MaD:48137 | | Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | Log4jJndiInjectionTest.java:341:86:341:102 | (...)... | provenance | Sink:MaD:2126 | -| Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | Log4jJndiInjectionTest.java:341:86:341:102 | (...)... | provenance | Sink:MaD:48131 | +| Log4jJndiInjectionTest.java:341:95:341:102 | source(...) : String | Log4jJndiInjectionTest.java:341:86:341:102 | (...)... | provenance | Sink:MaD:48137 | | Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | Log4jJndiInjectionTest.java:342:71:342:87 | (...)... | provenance | Sink:MaD:2126 | -| Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | Log4jJndiInjectionTest.java:342:71:342:87 | (...)... | provenance | Sink:MaD:48131 | +| Log4jJndiInjectionTest.java:342:80:342:87 | source(...) : String | Log4jJndiInjectionTest.java:342:71:342:87 | (...)... | provenance | Sink:MaD:48137 | | Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | Log4jJndiInjectionTest.java:343:56:343:72 | (...)... | provenance | Sink:MaD:2126 | -| Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | Log4jJndiInjectionTest.java:343:56:343:72 | (...)... | provenance | Sink:MaD:48131 | +| Log4jJndiInjectionTest.java:343:65:343:72 | source(...) : String | Log4jJndiInjectionTest.java:343:56:343:72 | (...)... | provenance | Sink:MaD:48137 | | Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | Log4jJndiInjectionTest.java:344:41:344:57 | (...)... | provenance | Sink:MaD:2126 | -| Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | Log4jJndiInjectionTest.java:344:41:344:57 | (...)... | provenance | Sink:MaD:48131 | +| Log4jJndiInjectionTest.java:344:50:344:57 | source(...) : String | Log4jJndiInjectionTest.java:344:41:344:57 | (...)... | provenance | Sink:MaD:48137 | | Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | Log4jJndiInjectionTest.java:345:146:345:162 | (...)... | provenance | Sink:MaD:2127 | -| Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | Log4jJndiInjectionTest.java:345:146:345:162 | (...)... | provenance | Sink:MaD:48132 | +| Log4jJndiInjectionTest.java:345:155:345:162 | source(...) : String | Log4jJndiInjectionTest.java:345:146:345:162 | (...)... | provenance | Sink:MaD:48138 | | Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | Log4jJndiInjectionTest.java:346:131:346:147 | (...)... | provenance | Sink:MaD:2127 | -| Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | Log4jJndiInjectionTest.java:346:131:346:147 | (...)... | provenance | Sink:MaD:48132 | +| Log4jJndiInjectionTest.java:346:140:346:147 | source(...) : String | Log4jJndiInjectionTest.java:346:131:346:147 | (...)... | provenance | Sink:MaD:48138 | | Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | Log4jJndiInjectionTest.java:347:116:347:132 | (...)... | provenance | Sink:MaD:2127 | -| Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | Log4jJndiInjectionTest.java:347:116:347:132 | (...)... | provenance | Sink:MaD:48132 | +| Log4jJndiInjectionTest.java:347:125:347:132 | source(...) : String | Log4jJndiInjectionTest.java:347:116:347:132 | (...)... | provenance | Sink:MaD:48138 | | Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | Log4jJndiInjectionTest.java:348:101:348:117 | (...)... | provenance | Sink:MaD:2127 | -| Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | Log4jJndiInjectionTest.java:348:101:348:117 | (...)... | provenance | Sink:MaD:48132 | +| Log4jJndiInjectionTest.java:348:110:348:117 | source(...) : String | Log4jJndiInjectionTest.java:348:101:348:117 | (...)... | provenance | Sink:MaD:48138 | | Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | Log4jJndiInjectionTest.java:349:86:349:102 | (...)... | provenance | Sink:MaD:2127 | -| Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | Log4jJndiInjectionTest.java:349:86:349:102 | (...)... | provenance | Sink:MaD:48132 | +| Log4jJndiInjectionTest.java:349:95:349:102 | source(...) : String | Log4jJndiInjectionTest.java:349:86:349:102 | (...)... | provenance | Sink:MaD:48138 | | Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | Log4jJndiInjectionTest.java:350:71:350:87 | (...)... | provenance | Sink:MaD:2127 | -| Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | Log4jJndiInjectionTest.java:350:71:350:87 | (...)... | provenance | Sink:MaD:48132 | +| Log4jJndiInjectionTest.java:350:80:350:87 | source(...) : String | Log4jJndiInjectionTest.java:350:71:350:87 | (...)... | provenance | Sink:MaD:48138 | | Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | Log4jJndiInjectionTest.java:351:56:351:72 | (...)... | provenance | Sink:MaD:2127 | -| Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | Log4jJndiInjectionTest.java:351:56:351:72 | (...)... | provenance | Sink:MaD:48132 | +| Log4jJndiInjectionTest.java:351:65:351:72 | source(...) : String | Log4jJndiInjectionTest.java:351:56:351:72 | (...)... | provenance | Sink:MaD:48138 | | Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | Log4jJndiInjectionTest.java:352:41:352:57 | (...)... | provenance | Sink:MaD:2127 | -| Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | Log4jJndiInjectionTest.java:352:41:352:57 | (...)... | provenance | Sink:MaD:48132 | +| Log4jJndiInjectionTest.java:352:50:352:57 | source(...) : String | Log4jJndiInjectionTest.java:352:41:352:57 | (...)... | provenance | Sink:MaD:48138 | | Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | Log4jJndiInjectionTest.java:353:161:353:177 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | Log4jJndiInjectionTest.java:353:161:353:177 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:353:170:353:177 | source(...) : String | Log4jJndiInjectionTest.java:353:161:353:177 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | Log4jJndiInjectionTest.java:354:146:354:162 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | Log4jJndiInjectionTest.java:354:146:354:162 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:354:155:354:162 | source(...) : String | Log4jJndiInjectionTest.java:354:146:354:162 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | Log4jJndiInjectionTest.java:355:131:355:147 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | Log4jJndiInjectionTest.java:355:131:355:147 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:355:140:355:147 | source(...) : String | Log4jJndiInjectionTest.java:355:131:355:147 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | Log4jJndiInjectionTest.java:356:116:356:132 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | Log4jJndiInjectionTest.java:356:116:356:132 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:356:125:356:132 | source(...) : String | Log4jJndiInjectionTest.java:356:116:356:132 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | Log4jJndiInjectionTest.java:357:101:357:117 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | Log4jJndiInjectionTest.java:357:101:357:117 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:357:110:357:117 | source(...) : String | Log4jJndiInjectionTest.java:357:101:357:117 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | Log4jJndiInjectionTest.java:358:86:358:102 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | Log4jJndiInjectionTest.java:358:86:358:102 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:358:95:358:102 | source(...) : String | Log4jJndiInjectionTest.java:358:86:358:102 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | Log4jJndiInjectionTest.java:359:71:359:87 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | Log4jJndiInjectionTest.java:359:71:359:87 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:359:80:359:87 | source(...) : String | Log4jJndiInjectionTest.java:359:71:359:87 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | Log4jJndiInjectionTest.java:360:56:360:72 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | Log4jJndiInjectionTest.java:360:56:360:72 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:360:65:360:72 | source(...) : String | Log4jJndiInjectionTest.java:360:56:360:72 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | Log4jJndiInjectionTest.java:361:41:361:57 | (...)... | provenance | Sink:MaD:2128 | -| Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | Log4jJndiInjectionTest.java:361:41:361:57 | (...)... | provenance | Sink:MaD:48133 | +| Log4jJndiInjectionTest.java:361:50:361:57 | source(...) : String | Log4jJndiInjectionTest.java:361:41:361:57 | (...)... | provenance | Sink:MaD:48139 | | Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | Log4jJndiInjectionTest.java:362:176:362:192 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | Log4jJndiInjectionTest.java:362:176:362:192 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:362:185:362:192 | source(...) : String | Log4jJndiInjectionTest.java:362:176:362:192 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | Log4jJndiInjectionTest.java:363:161:363:177 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | Log4jJndiInjectionTest.java:363:161:363:177 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:363:170:363:177 | source(...) : String | Log4jJndiInjectionTest.java:363:161:363:177 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | Log4jJndiInjectionTest.java:364:146:364:162 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | Log4jJndiInjectionTest.java:364:146:364:162 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:364:155:364:162 | source(...) : String | Log4jJndiInjectionTest.java:364:146:364:162 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | Log4jJndiInjectionTest.java:365:131:365:147 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | Log4jJndiInjectionTest.java:365:131:365:147 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:365:140:365:147 | source(...) : String | Log4jJndiInjectionTest.java:365:131:365:147 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | Log4jJndiInjectionTest.java:366:116:366:132 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | Log4jJndiInjectionTest.java:366:116:366:132 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:366:125:366:132 | source(...) : String | Log4jJndiInjectionTest.java:366:116:366:132 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | Log4jJndiInjectionTest.java:367:101:367:117 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | Log4jJndiInjectionTest.java:367:101:367:117 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:367:110:367:117 | source(...) : String | Log4jJndiInjectionTest.java:367:101:367:117 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | Log4jJndiInjectionTest.java:368:86:368:102 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | Log4jJndiInjectionTest.java:368:86:368:102 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:368:95:368:102 | source(...) : String | Log4jJndiInjectionTest.java:368:86:368:102 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | Log4jJndiInjectionTest.java:369:71:369:87 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | Log4jJndiInjectionTest.java:369:71:369:87 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:369:80:369:87 | source(...) : String | Log4jJndiInjectionTest.java:369:71:369:87 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | Log4jJndiInjectionTest.java:370:56:370:72 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | Log4jJndiInjectionTest.java:370:56:370:72 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:370:65:370:72 | source(...) : String | Log4jJndiInjectionTest.java:370:56:370:72 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | Log4jJndiInjectionTest.java:371:41:371:57 | (...)... | provenance | Sink:MaD:2129 | -| Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | Log4jJndiInjectionTest.java:371:41:371:57 | (...)... | provenance | Sink:MaD:48134 | +| Log4jJndiInjectionTest.java:371:50:371:57 | source(...) : String | Log4jJndiInjectionTest.java:371:41:371:57 | (...)... | provenance | Sink:MaD:48140 | | Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | Log4jJndiInjectionTest.java:372:41:372:57 | (...)... | provenance | Sink:MaD:2121 | -| Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | Log4jJndiInjectionTest.java:372:41:372:57 | (...)... | provenance | Sink:MaD:48126 | +| Log4jJndiInjectionTest.java:372:50:372:57 | source(...) : String | Log4jJndiInjectionTest.java:372:41:372:57 | (...)... | provenance | Sink:MaD:48132 | | Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | Log4jJndiInjectionTest.java:373:56:373:77 | (...)... | provenance | Sink:MaD:2121 | -| Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | Log4jJndiInjectionTest.java:373:56:373:77 | (...)... | provenance | Sink:MaD:48126 | +| Log4jJndiInjectionTest.java:373:70:373:77 | source(...) : String | Log4jJndiInjectionTest.java:373:56:373:77 | (...)... | provenance | Sink:MaD:48132 | | Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | Log4jJndiInjectionTest.java:374:41:374:57 | (...)... | provenance | Sink:MaD:2133 | -| Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | Log4jJndiInjectionTest.java:374:41:374:57 | (...)... | provenance | Sink:MaD:48138 | +| Log4jJndiInjectionTest.java:374:50:374:57 | source(...) : String | Log4jJndiInjectionTest.java:374:41:374:57 | (...)... | provenance | Sink:MaD:48144 | | Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | Log4jJndiInjectionTest.java:375:41:375:62 | (...)... | provenance | Sink:MaD:2134 | -| Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | Log4jJndiInjectionTest.java:375:41:375:62 | (...)... | provenance | Sink:MaD:48139 | +| Log4jJndiInjectionTest.java:375:55:375:62 | source(...) : String | Log4jJndiInjectionTest.java:375:41:375:62 | (...)... | provenance | Sink:MaD:48145 | | Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | Log4jJndiInjectionTest.java:376:41:376:62 | (...)... | provenance | Sink:MaD:2135 | -| Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | Log4jJndiInjectionTest.java:376:41:376:62 | (...)... | provenance | Sink:MaD:48140 | +| Log4jJndiInjectionTest.java:376:55:376:62 | source(...) : String | Log4jJndiInjectionTest.java:376:41:376:62 | (...)... | provenance | Sink:MaD:48146 | | Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | Log4jJndiInjectionTest.java:377:26:377:51 | (...)... | provenance | Sink:MaD:2138 | -| Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | Log4jJndiInjectionTest.java:377:26:377:51 | (...)... | provenance | Sink:MaD:48143 | +| Log4jJndiInjectionTest.java:377:44:377:51 | source(...) : String | Log4jJndiInjectionTest.java:377:26:377:51 | (...)... | provenance | Sink:MaD:48149 | | Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | Log4jJndiInjectionTest.java:378:26:378:51 | (...)... | provenance | Sink:MaD:2139 | -| Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | Log4jJndiInjectionTest.java:378:26:378:51 | (...)... | provenance | Sink:MaD:48144 | +| Log4jJndiInjectionTest.java:378:44:378:51 | source(...) : String | Log4jJndiInjectionTest.java:378:26:378:51 | (...)... | provenance | Sink:MaD:48150 | | Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | Log4jJndiInjectionTest.java:379:26:379:43 | (...)... | provenance | Sink:MaD:2136 | -| Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | Log4jJndiInjectionTest.java:379:26:379:43 | (...)... | provenance | Sink:MaD:48141 | +| Log4jJndiInjectionTest.java:379:36:379:43 | source(...) : String | Log4jJndiInjectionTest.java:379:26:379:43 | (...)... | provenance | Sink:MaD:48147 | | Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | Log4jJndiInjectionTest.java:380:26:380:43 | (...)... | provenance | Sink:MaD:2137 | -| Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | Log4jJndiInjectionTest.java:380:26:380:43 | (...)... | provenance | Sink:MaD:48142 | +| Log4jJndiInjectionTest.java:380:36:380:43 | source(...) : String | Log4jJndiInjectionTest.java:380:26:380:43 | (...)... | provenance | Sink:MaD:48148 | | Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | Log4jJndiInjectionTest.java:383:26:383:42 | (...)... | provenance | Sink:MaD:2142 | -| Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | Log4jJndiInjectionTest.java:383:26:383:42 | (...)... | provenance | Sink:MaD:48147 | +| Log4jJndiInjectionTest.java:383:35:383:42 | source(...) : String | Log4jJndiInjectionTest.java:383:26:383:42 | (...)... | provenance | Sink:MaD:48153 | | Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | Log4jJndiInjectionTest.java:384:26:384:42 | (...)... | provenance | Sink:MaD:2153 | -| Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | Log4jJndiInjectionTest.java:384:26:384:42 | (...)... | provenance | Sink:MaD:48158 | +| Log4jJndiInjectionTest.java:384:35:384:42 | source(...) : String | Log4jJndiInjectionTest.java:384:26:384:42 | (...)... | provenance | Sink:MaD:48164 | | Log4jJndiInjectionTest.java:385:41:385:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:385:41:385:63 | new Object[] | provenance | Sink:MaD:2153 | -| Log4jJndiInjectionTest.java:385:41:385:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:385:41:385:63 | new Object[] | provenance | Sink:MaD:48158 | +| Log4jJndiInjectionTest.java:385:41:385:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:385:41:385:63 | new Object[] | provenance | Sink:MaD:48164 | | Log4jJndiInjectionTest.java:385:55:385:62 | source(...) : String | Log4jJndiInjectionTest.java:385:41:385:63 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | Log4jJndiInjectionTest.java:386:41:386:57 | (...)... | provenance | Sink:MaD:2143 | -| Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | Log4jJndiInjectionTest.java:386:41:386:57 | (...)... | provenance | Sink:MaD:48148 | +| Log4jJndiInjectionTest.java:386:50:386:57 | source(...) : String | Log4jJndiInjectionTest.java:386:41:386:57 | (...)... | provenance | Sink:MaD:48154 | | Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | Log4jJndiInjectionTest.java:387:26:387:42 | (...)... | provenance | Sink:MaD:2143 | -| Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | Log4jJndiInjectionTest.java:387:26:387:42 | (...)... | provenance | Sink:MaD:48148 | +| Log4jJndiInjectionTest.java:387:35:387:42 | source(...) : String | Log4jJndiInjectionTest.java:387:26:387:42 | (...)... | provenance | Sink:MaD:48154 | | Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | Log4jJndiInjectionTest.java:388:56:388:72 | (...)... | provenance | Sink:MaD:2144 | -| Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | Log4jJndiInjectionTest.java:388:56:388:72 | (...)... | provenance | Sink:MaD:48149 | +| Log4jJndiInjectionTest.java:388:65:388:72 | source(...) : String | Log4jJndiInjectionTest.java:388:56:388:72 | (...)... | provenance | Sink:MaD:48155 | | Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | Log4jJndiInjectionTest.java:389:41:389:57 | (...)... | provenance | Sink:MaD:2144 | -| Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | Log4jJndiInjectionTest.java:389:41:389:57 | (...)... | provenance | Sink:MaD:48149 | +| Log4jJndiInjectionTest.java:389:50:389:57 | source(...) : String | Log4jJndiInjectionTest.java:389:41:389:57 | (...)... | provenance | Sink:MaD:48155 | | Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | Log4jJndiInjectionTest.java:390:26:390:42 | (...)... | provenance | Sink:MaD:2144 | -| Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | Log4jJndiInjectionTest.java:390:26:390:42 | (...)... | provenance | Sink:MaD:48149 | +| Log4jJndiInjectionTest.java:390:35:390:42 | source(...) : String | Log4jJndiInjectionTest.java:390:26:390:42 | (...)... | provenance | Sink:MaD:48155 | | Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | Log4jJndiInjectionTest.java:391:71:391:87 | (...)... | provenance | Sink:MaD:2145 | -| Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | Log4jJndiInjectionTest.java:391:71:391:87 | (...)... | provenance | Sink:MaD:48150 | +| Log4jJndiInjectionTest.java:391:80:391:87 | source(...) : String | Log4jJndiInjectionTest.java:391:71:391:87 | (...)... | provenance | Sink:MaD:48156 | | Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | Log4jJndiInjectionTest.java:392:56:392:72 | (...)... | provenance | Sink:MaD:2145 | -| Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | Log4jJndiInjectionTest.java:392:56:392:72 | (...)... | provenance | Sink:MaD:48150 | +| Log4jJndiInjectionTest.java:392:65:392:72 | source(...) : String | Log4jJndiInjectionTest.java:392:56:392:72 | (...)... | provenance | Sink:MaD:48156 | | Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | Log4jJndiInjectionTest.java:393:41:393:57 | (...)... | provenance | Sink:MaD:2145 | -| Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | Log4jJndiInjectionTest.java:393:41:393:57 | (...)... | provenance | Sink:MaD:48150 | +| Log4jJndiInjectionTest.java:393:50:393:57 | source(...) : String | Log4jJndiInjectionTest.java:393:41:393:57 | (...)... | provenance | Sink:MaD:48156 | | Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | Log4jJndiInjectionTest.java:394:26:394:42 | (...)... | provenance | Sink:MaD:2145 | -| Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | Log4jJndiInjectionTest.java:394:26:394:42 | (...)... | provenance | Sink:MaD:48150 | +| Log4jJndiInjectionTest.java:394:35:394:42 | source(...) : String | Log4jJndiInjectionTest.java:394:26:394:42 | (...)... | provenance | Sink:MaD:48156 | | Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | Log4jJndiInjectionTest.java:395:86:395:102 | (...)... | provenance | Sink:MaD:2146 | -| Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | Log4jJndiInjectionTest.java:395:86:395:102 | (...)... | provenance | Sink:MaD:48151 | +| Log4jJndiInjectionTest.java:395:95:395:102 | source(...) : String | Log4jJndiInjectionTest.java:395:86:395:102 | (...)... | provenance | Sink:MaD:48157 | | Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | Log4jJndiInjectionTest.java:396:71:396:87 | (...)... | provenance | Sink:MaD:2146 | -| Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | Log4jJndiInjectionTest.java:396:71:396:87 | (...)... | provenance | Sink:MaD:48151 | +| Log4jJndiInjectionTest.java:396:80:396:87 | source(...) : String | Log4jJndiInjectionTest.java:396:71:396:87 | (...)... | provenance | Sink:MaD:48157 | | Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | Log4jJndiInjectionTest.java:397:56:397:72 | (...)... | provenance | Sink:MaD:2146 | -| Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | Log4jJndiInjectionTest.java:397:56:397:72 | (...)... | provenance | Sink:MaD:48151 | +| Log4jJndiInjectionTest.java:397:65:397:72 | source(...) : String | Log4jJndiInjectionTest.java:397:56:397:72 | (...)... | provenance | Sink:MaD:48157 | | Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | Log4jJndiInjectionTest.java:398:41:398:57 | (...)... | provenance | Sink:MaD:2146 | -| Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | Log4jJndiInjectionTest.java:398:41:398:57 | (...)... | provenance | Sink:MaD:48151 | +| Log4jJndiInjectionTest.java:398:50:398:57 | source(...) : String | Log4jJndiInjectionTest.java:398:41:398:57 | (...)... | provenance | Sink:MaD:48157 | | Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | Log4jJndiInjectionTest.java:399:26:399:42 | (...)... | provenance | Sink:MaD:2146 | -| Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | Log4jJndiInjectionTest.java:399:26:399:42 | (...)... | provenance | Sink:MaD:48151 | +| Log4jJndiInjectionTest.java:399:35:399:42 | source(...) : String | Log4jJndiInjectionTest.java:399:26:399:42 | (...)... | provenance | Sink:MaD:48157 | | Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | Log4jJndiInjectionTest.java:400:101:400:117 | (...)... | provenance | Sink:MaD:2147 | -| Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | Log4jJndiInjectionTest.java:400:101:400:117 | (...)... | provenance | Sink:MaD:48152 | +| Log4jJndiInjectionTest.java:400:110:400:117 | source(...) : String | Log4jJndiInjectionTest.java:400:101:400:117 | (...)... | provenance | Sink:MaD:48158 | | Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | Log4jJndiInjectionTest.java:401:86:401:102 | (...)... | provenance | Sink:MaD:2147 | -| Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | Log4jJndiInjectionTest.java:401:86:401:102 | (...)... | provenance | Sink:MaD:48152 | +| Log4jJndiInjectionTest.java:401:95:401:102 | source(...) : String | Log4jJndiInjectionTest.java:401:86:401:102 | (...)... | provenance | Sink:MaD:48158 | | Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | Log4jJndiInjectionTest.java:402:71:402:87 | (...)... | provenance | Sink:MaD:2147 | -| Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | Log4jJndiInjectionTest.java:402:71:402:87 | (...)... | provenance | Sink:MaD:48152 | +| Log4jJndiInjectionTest.java:402:80:402:87 | source(...) : String | Log4jJndiInjectionTest.java:402:71:402:87 | (...)... | provenance | Sink:MaD:48158 | | Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | Log4jJndiInjectionTest.java:403:56:403:72 | (...)... | provenance | Sink:MaD:2147 | -| Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | Log4jJndiInjectionTest.java:403:56:403:72 | (...)... | provenance | Sink:MaD:48152 | +| Log4jJndiInjectionTest.java:403:65:403:72 | source(...) : String | Log4jJndiInjectionTest.java:403:56:403:72 | (...)... | provenance | Sink:MaD:48158 | | Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | Log4jJndiInjectionTest.java:404:41:404:57 | (...)... | provenance | Sink:MaD:2147 | -| Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | Log4jJndiInjectionTest.java:404:41:404:57 | (...)... | provenance | Sink:MaD:48152 | +| Log4jJndiInjectionTest.java:404:50:404:57 | source(...) : String | Log4jJndiInjectionTest.java:404:41:404:57 | (...)... | provenance | Sink:MaD:48158 | | Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | Log4jJndiInjectionTest.java:405:26:405:42 | (...)... | provenance | Sink:MaD:2147 | -| Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | Log4jJndiInjectionTest.java:405:26:405:42 | (...)... | provenance | Sink:MaD:48152 | +| Log4jJndiInjectionTest.java:405:35:405:42 | source(...) : String | Log4jJndiInjectionTest.java:405:26:405:42 | (...)... | provenance | Sink:MaD:48158 | | Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | Log4jJndiInjectionTest.java:406:116:406:132 | (...)... | provenance | Sink:MaD:2148 | -| Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | Log4jJndiInjectionTest.java:406:116:406:132 | (...)... | provenance | Sink:MaD:48153 | +| Log4jJndiInjectionTest.java:406:125:406:132 | source(...) : String | Log4jJndiInjectionTest.java:406:116:406:132 | (...)... | provenance | Sink:MaD:48159 | | Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | Log4jJndiInjectionTest.java:407:101:407:117 | (...)... | provenance | Sink:MaD:2148 | -| Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | Log4jJndiInjectionTest.java:407:101:407:117 | (...)... | provenance | Sink:MaD:48153 | +| Log4jJndiInjectionTest.java:407:110:407:117 | source(...) : String | Log4jJndiInjectionTest.java:407:101:407:117 | (...)... | provenance | Sink:MaD:48159 | | Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | Log4jJndiInjectionTest.java:408:86:408:102 | (...)... | provenance | Sink:MaD:2148 | -| Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | Log4jJndiInjectionTest.java:408:86:408:102 | (...)... | provenance | Sink:MaD:48153 | +| Log4jJndiInjectionTest.java:408:95:408:102 | source(...) : String | Log4jJndiInjectionTest.java:408:86:408:102 | (...)... | provenance | Sink:MaD:48159 | | Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | Log4jJndiInjectionTest.java:409:71:409:87 | (...)... | provenance | Sink:MaD:2148 | -| Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | Log4jJndiInjectionTest.java:409:71:409:87 | (...)... | provenance | Sink:MaD:48153 | +| Log4jJndiInjectionTest.java:409:80:409:87 | source(...) : String | Log4jJndiInjectionTest.java:409:71:409:87 | (...)... | provenance | Sink:MaD:48159 | | Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | Log4jJndiInjectionTest.java:410:56:410:72 | (...)... | provenance | Sink:MaD:2148 | -| Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | Log4jJndiInjectionTest.java:410:56:410:72 | (...)... | provenance | Sink:MaD:48153 | +| Log4jJndiInjectionTest.java:410:65:410:72 | source(...) : String | Log4jJndiInjectionTest.java:410:56:410:72 | (...)... | provenance | Sink:MaD:48159 | | Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | Log4jJndiInjectionTest.java:411:41:411:57 | (...)... | provenance | Sink:MaD:2148 | -| Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | Log4jJndiInjectionTest.java:411:41:411:57 | (...)... | provenance | Sink:MaD:48153 | +| Log4jJndiInjectionTest.java:411:50:411:57 | source(...) : String | Log4jJndiInjectionTest.java:411:41:411:57 | (...)... | provenance | Sink:MaD:48159 | | Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | Log4jJndiInjectionTest.java:412:26:412:42 | (...)... | provenance | Sink:MaD:2148 | -| Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | Log4jJndiInjectionTest.java:412:26:412:42 | (...)... | provenance | Sink:MaD:48153 | +| Log4jJndiInjectionTest.java:412:35:412:42 | source(...) : String | Log4jJndiInjectionTest.java:412:26:412:42 | (...)... | provenance | Sink:MaD:48159 | | Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | Log4jJndiInjectionTest.java:413:131:413:147 | (...)... | provenance | Sink:MaD:2149 | -| Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | Log4jJndiInjectionTest.java:413:131:413:147 | (...)... | provenance | Sink:MaD:48154 | +| Log4jJndiInjectionTest.java:413:140:413:147 | source(...) : String | Log4jJndiInjectionTest.java:413:131:413:147 | (...)... | provenance | Sink:MaD:48160 | | Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | Log4jJndiInjectionTest.java:414:116:414:132 | (...)... | provenance | Sink:MaD:2149 | -| Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | Log4jJndiInjectionTest.java:414:116:414:132 | (...)... | provenance | Sink:MaD:48154 | +| Log4jJndiInjectionTest.java:414:125:414:132 | source(...) : String | Log4jJndiInjectionTest.java:414:116:414:132 | (...)... | provenance | Sink:MaD:48160 | | Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | Log4jJndiInjectionTest.java:415:101:415:117 | (...)... | provenance | Sink:MaD:2149 | -| Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | Log4jJndiInjectionTest.java:415:101:415:117 | (...)... | provenance | Sink:MaD:48154 | +| Log4jJndiInjectionTest.java:415:110:415:117 | source(...) : String | Log4jJndiInjectionTest.java:415:101:415:117 | (...)... | provenance | Sink:MaD:48160 | | Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | Log4jJndiInjectionTest.java:416:86:416:102 | (...)... | provenance | Sink:MaD:2149 | -| Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | Log4jJndiInjectionTest.java:416:86:416:102 | (...)... | provenance | Sink:MaD:48154 | +| Log4jJndiInjectionTest.java:416:95:416:102 | source(...) : String | Log4jJndiInjectionTest.java:416:86:416:102 | (...)... | provenance | Sink:MaD:48160 | | Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | Log4jJndiInjectionTest.java:417:71:417:87 | (...)... | provenance | Sink:MaD:2149 | -| Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | Log4jJndiInjectionTest.java:417:71:417:87 | (...)... | provenance | Sink:MaD:48154 | +| Log4jJndiInjectionTest.java:417:80:417:87 | source(...) : String | Log4jJndiInjectionTest.java:417:71:417:87 | (...)... | provenance | Sink:MaD:48160 | | Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | Log4jJndiInjectionTest.java:418:56:418:72 | (...)... | provenance | Sink:MaD:2149 | -| Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | Log4jJndiInjectionTest.java:418:56:418:72 | (...)... | provenance | Sink:MaD:48154 | +| Log4jJndiInjectionTest.java:418:65:418:72 | source(...) : String | Log4jJndiInjectionTest.java:418:56:418:72 | (...)... | provenance | Sink:MaD:48160 | | Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | Log4jJndiInjectionTest.java:419:41:419:57 | (...)... | provenance | Sink:MaD:2149 | -| Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | Log4jJndiInjectionTest.java:419:41:419:57 | (...)... | provenance | Sink:MaD:48154 | +| Log4jJndiInjectionTest.java:419:50:419:57 | source(...) : String | Log4jJndiInjectionTest.java:419:41:419:57 | (...)... | provenance | Sink:MaD:48160 | | Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | Log4jJndiInjectionTest.java:420:26:420:42 | (...)... | provenance | Sink:MaD:2149 | -| Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | Log4jJndiInjectionTest.java:420:26:420:42 | (...)... | provenance | Sink:MaD:48154 | +| Log4jJndiInjectionTest.java:420:35:420:42 | source(...) : String | Log4jJndiInjectionTest.java:420:26:420:42 | (...)... | provenance | Sink:MaD:48160 | | Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | Log4jJndiInjectionTest.java:421:146:421:162 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | Log4jJndiInjectionTest.java:421:146:421:162 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:421:155:421:162 | source(...) : String | Log4jJndiInjectionTest.java:421:146:421:162 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | Log4jJndiInjectionTest.java:422:131:422:147 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | Log4jJndiInjectionTest.java:422:131:422:147 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:422:140:422:147 | source(...) : String | Log4jJndiInjectionTest.java:422:131:422:147 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | Log4jJndiInjectionTest.java:423:116:423:132 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | Log4jJndiInjectionTest.java:423:116:423:132 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:423:125:423:132 | source(...) : String | Log4jJndiInjectionTest.java:423:116:423:132 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | Log4jJndiInjectionTest.java:424:101:424:117 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | Log4jJndiInjectionTest.java:424:101:424:117 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:424:110:424:117 | source(...) : String | Log4jJndiInjectionTest.java:424:101:424:117 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | Log4jJndiInjectionTest.java:425:86:425:102 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | Log4jJndiInjectionTest.java:425:86:425:102 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:425:95:425:102 | source(...) : String | Log4jJndiInjectionTest.java:425:86:425:102 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | Log4jJndiInjectionTest.java:426:71:426:87 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | Log4jJndiInjectionTest.java:426:71:426:87 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:426:80:426:87 | source(...) : String | Log4jJndiInjectionTest.java:426:71:426:87 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | Log4jJndiInjectionTest.java:427:56:427:72 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | Log4jJndiInjectionTest.java:427:56:427:72 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:427:65:427:72 | source(...) : String | Log4jJndiInjectionTest.java:427:56:427:72 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | Log4jJndiInjectionTest.java:428:41:428:57 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | Log4jJndiInjectionTest.java:428:41:428:57 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:428:50:428:57 | source(...) : String | Log4jJndiInjectionTest.java:428:41:428:57 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | Log4jJndiInjectionTest.java:429:26:429:42 | (...)... | provenance | Sink:MaD:2150 | -| Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | Log4jJndiInjectionTest.java:429:26:429:42 | (...)... | provenance | Sink:MaD:48155 | +| Log4jJndiInjectionTest.java:429:35:429:42 | source(...) : String | Log4jJndiInjectionTest.java:429:26:429:42 | (...)... | provenance | Sink:MaD:48161 | | Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | Log4jJndiInjectionTest.java:430:161:430:177 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | Log4jJndiInjectionTest.java:430:161:430:177 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:430:170:430:177 | source(...) : String | Log4jJndiInjectionTest.java:430:161:430:177 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | Log4jJndiInjectionTest.java:431:146:431:162 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | Log4jJndiInjectionTest.java:431:146:431:162 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:431:155:431:162 | source(...) : String | Log4jJndiInjectionTest.java:431:146:431:162 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | Log4jJndiInjectionTest.java:432:131:432:147 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | Log4jJndiInjectionTest.java:432:131:432:147 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:432:140:432:147 | source(...) : String | Log4jJndiInjectionTest.java:432:131:432:147 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | Log4jJndiInjectionTest.java:433:116:433:132 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | Log4jJndiInjectionTest.java:433:116:433:132 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:433:125:433:132 | source(...) : String | Log4jJndiInjectionTest.java:433:116:433:132 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | Log4jJndiInjectionTest.java:434:101:434:117 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | Log4jJndiInjectionTest.java:434:101:434:117 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:434:110:434:117 | source(...) : String | Log4jJndiInjectionTest.java:434:101:434:117 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | Log4jJndiInjectionTest.java:435:86:435:102 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | Log4jJndiInjectionTest.java:435:86:435:102 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:435:95:435:102 | source(...) : String | Log4jJndiInjectionTest.java:435:86:435:102 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | Log4jJndiInjectionTest.java:436:71:436:87 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | Log4jJndiInjectionTest.java:436:71:436:87 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:436:80:436:87 | source(...) : String | Log4jJndiInjectionTest.java:436:71:436:87 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | Log4jJndiInjectionTest.java:437:56:437:72 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | Log4jJndiInjectionTest.java:437:56:437:72 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:437:65:437:72 | source(...) : String | Log4jJndiInjectionTest.java:437:56:437:72 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | Log4jJndiInjectionTest.java:438:41:438:57 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | Log4jJndiInjectionTest.java:438:41:438:57 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:438:50:438:57 | source(...) : String | Log4jJndiInjectionTest.java:438:41:438:57 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | Log4jJndiInjectionTest.java:439:26:439:42 | (...)... | provenance | Sink:MaD:2151 | -| Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | Log4jJndiInjectionTest.java:439:26:439:42 | (...)... | provenance | Sink:MaD:48156 | +| Log4jJndiInjectionTest.java:439:35:439:42 | source(...) : String | Log4jJndiInjectionTest.java:439:26:439:42 | (...)... | provenance | Sink:MaD:48162 | | Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | Log4jJndiInjectionTest.java:440:26:440:42 | (...)... | provenance | Sink:MaD:2143 | -| Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | Log4jJndiInjectionTest.java:440:26:440:42 | (...)... | provenance | Sink:MaD:48148 | +| Log4jJndiInjectionTest.java:440:35:440:42 | source(...) : String | Log4jJndiInjectionTest.java:440:26:440:42 | (...)... | provenance | Sink:MaD:48154 | | Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | Log4jJndiInjectionTest.java:441:41:441:62 | (...)... | provenance | Sink:MaD:2143 | -| Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | Log4jJndiInjectionTest.java:441:41:441:62 | (...)... | provenance | Sink:MaD:48148 | +| Log4jJndiInjectionTest.java:441:55:441:62 | source(...) : String | Log4jJndiInjectionTest.java:441:41:441:62 | (...)... | provenance | Sink:MaD:48154 | | Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | Log4jJndiInjectionTest.java:442:26:442:42 | (...)... | provenance | Sink:MaD:2155 | -| Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | Log4jJndiInjectionTest.java:442:26:442:42 | (...)... | provenance | Sink:MaD:48160 | +| Log4jJndiInjectionTest.java:442:35:442:42 | source(...) : String | Log4jJndiInjectionTest.java:442:26:442:42 | (...)... | provenance | Sink:MaD:48166 | | Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | Log4jJndiInjectionTest.java:443:26:443:47 | (...)... | provenance | Sink:MaD:2156 | -| Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | Log4jJndiInjectionTest.java:443:26:443:47 | (...)... | provenance | Sink:MaD:48161 | +| Log4jJndiInjectionTest.java:443:40:443:47 | source(...) : String | Log4jJndiInjectionTest.java:443:26:443:47 | (...)... | provenance | Sink:MaD:48167 | | Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | Log4jJndiInjectionTest.java:444:26:444:47 | (...)... | provenance | Sink:MaD:2157 | -| Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | Log4jJndiInjectionTest.java:444:26:444:47 | (...)... | provenance | Sink:MaD:48162 | +| Log4jJndiInjectionTest.java:444:40:444:47 | source(...) : String | Log4jJndiInjectionTest.java:444:26:444:47 | (...)... | provenance | Sink:MaD:48168 | | Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | Log4jJndiInjectionTest.java:445:25:445:47 | (...)... | provenance | Sink:MaD:2158 | -| Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | Log4jJndiInjectionTest.java:445:25:445:47 | (...)... | provenance | Sink:MaD:48163 | +| Log4jJndiInjectionTest.java:445:40:445:47 | source(...) : String | Log4jJndiInjectionTest.java:445:25:445:47 | (...)... | provenance | Sink:MaD:48169 | | Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | Log4jJndiInjectionTest.java:446:25:446:47 | (...)... | provenance | Sink:MaD:2159 | -| Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | Log4jJndiInjectionTest.java:446:25:446:47 | (...)... | provenance | Sink:MaD:48164 | +| Log4jJndiInjectionTest.java:446:40:446:47 | source(...) : String | Log4jJndiInjectionTest.java:446:25:446:47 | (...)... | provenance | Sink:MaD:48170 | | Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | Log4jJndiInjectionTest.java:447:40:447:62 | (...)... | provenance | Sink:MaD:2160 | -| Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | Log4jJndiInjectionTest.java:447:40:447:62 | (...)... | provenance | Sink:MaD:48165 | +| Log4jJndiInjectionTest.java:447:55:447:62 | source(...) : String | Log4jJndiInjectionTest.java:447:40:447:62 | (...)... | provenance | Sink:MaD:48171 | | Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | Log4jJndiInjectionTest.java:448:40:448:62 | (...)... | provenance | Sink:MaD:2161 | -| Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | Log4jJndiInjectionTest.java:448:40:448:62 | (...)... | provenance | Sink:MaD:48166 | +| Log4jJndiInjectionTest.java:448:55:448:62 | source(...) : String | Log4jJndiInjectionTest.java:448:40:448:62 | (...)... | provenance | Sink:MaD:48172 | | Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | Log4jJndiInjectionTest.java:449:40:449:57 | (...)... | provenance | Sink:MaD:2162 | -| Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | Log4jJndiInjectionTest.java:449:40:449:57 | (...)... | provenance | Sink:MaD:48167 | +| Log4jJndiInjectionTest.java:449:50:449:57 | source(...) : String | Log4jJndiInjectionTest.java:449:40:449:57 | (...)... | provenance | Sink:MaD:48173 | | Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | Log4jJndiInjectionTest.java:450:40:450:65 | (...)... | provenance | Sink:MaD:2163 | -| Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | Log4jJndiInjectionTest.java:450:40:450:65 | (...)... | provenance | Sink:MaD:48168 | +| Log4jJndiInjectionTest.java:450:58:450:65 | source(...) : String | Log4jJndiInjectionTest.java:450:40:450:65 | (...)... | provenance | Sink:MaD:48174 | | Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | Log4jJndiInjectionTest.java:451:40:451:65 | (...)... | provenance | Sink:MaD:2164 | -| Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | Log4jJndiInjectionTest.java:451:40:451:65 | (...)... | provenance | Sink:MaD:48169 | +| Log4jJndiInjectionTest.java:451:58:451:65 | source(...) : String | Log4jJndiInjectionTest.java:451:40:451:65 | (...)... | provenance | Sink:MaD:48175 | | Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | Log4jJndiInjectionTest.java:453:40:453:56 | (...)... | provenance | Sink:MaD:2167 | -| Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | Log4jJndiInjectionTest.java:453:40:453:56 | (...)... | provenance | Sink:MaD:48172 | +| Log4jJndiInjectionTest.java:453:49:453:56 | source(...) : String | Log4jJndiInjectionTest.java:453:40:453:56 | (...)... | provenance | Sink:MaD:48178 | | Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | Log4jJndiInjectionTest.java:454:40:454:56 | (...)... | provenance | Sink:MaD:2178 | -| Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | Log4jJndiInjectionTest.java:454:40:454:56 | (...)... | provenance | Sink:MaD:48183 | +| Log4jJndiInjectionTest.java:454:49:454:56 | source(...) : String | Log4jJndiInjectionTest.java:454:40:454:56 | (...)... | provenance | Sink:MaD:48189 | | Log4jJndiInjectionTest.java:455:55:455:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:455:55:455:77 | new Object[] | provenance | Sink:MaD:2178 | -| Log4jJndiInjectionTest.java:455:55:455:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:455:55:455:77 | new Object[] | provenance | Sink:MaD:48183 | +| Log4jJndiInjectionTest.java:455:55:455:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:455:55:455:77 | new Object[] | provenance | Sink:MaD:48189 | | Log4jJndiInjectionTest.java:455:69:455:76 | source(...) : String | Log4jJndiInjectionTest.java:455:55:455:77 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | Log4jJndiInjectionTest.java:456:55:456:71 | (...)... | provenance | Sink:MaD:2168 | -| Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | Log4jJndiInjectionTest.java:456:55:456:71 | (...)... | provenance | Sink:MaD:48173 | +| Log4jJndiInjectionTest.java:456:64:456:71 | source(...) : String | Log4jJndiInjectionTest.java:456:55:456:71 | (...)... | provenance | Sink:MaD:48179 | | Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | Log4jJndiInjectionTest.java:457:40:457:56 | (...)... | provenance | Sink:MaD:2168 | -| Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | Log4jJndiInjectionTest.java:457:40:457:56 | (...)... | provenance | Sink:MaD:48173 | +| Log4jJndiInjectionTest.java:457:49:457:56 | source(...) : String | Log4jJndiInjectionTest.java:457:40:457:56 | (...)... | provenance | Sink:MaD:48179 | | Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | Log4jJndiInjectionTest.java:458:70:458:86 | (...)... | provenance | Sink:MaD:2169 | -| Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | Log4jJndiInjectionTest.java:458:70:458:86 | (...)... | provenance | Sink:MaD:48174 | +| Log4jJndiInjectionTest.java:458:79:458:86 | source(...) : String | Log4jJndiInjectionTest.java:458:70:458:86 | (...)... | provenance | Sink:MaD:48180 | | Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | Log4jJndiInjectionTest.java:459:55:459:71 | (...)... | provenance | Sink:MaD:2169 | -| Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | Log4jJndiInjectionTest.java:459:55:459:71 | (...)... | provenance | Sink:MaD:48174 | +| Log4jJndiInjectionTest.java:459:64:459:71 | source(...) : String | Log4jJndiInjectionTest.java:459:55:459:71 | (...)... | provenance | Sink:MaD:48180 | | Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | Log4jJndiInjectionTest.java:460:40:460:56 | (...)... | provenance | Sink:MaD:2169 | -| Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | Log4jJndiInjectionTest.java:460:40:460:56 | (...)... | provenance | Sink:MaD:48174 | +| Log4jJndiInjectionTest.java:460:49:460:56 | source(...) : String | Log4jJndiInjectionTest.java:460:40:460:56 | (...)... | provenance | Sink:MaD:48180 | | Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | Log4jJndiInjectionTest.java:461:85:461:101 | (...)... | provenance | Sink:MaD:2170 | -| Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | Log4jJndiInjectionTest.java:461:85:461:101 | (...)... | provenance | Sink:MaD:48175 | +| Log4jJndiInjectionTest.java:461:94:461:101 | source(...) : String | Log4jJndiInjectionTest.java:461:85:461:101 | (...)... | provenance | Sink:MaD:48181 | | Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | Log4jJndiInjectionTest.java:462:70:462:86 | (...)... | provenance | Sink:MaD:2170 | -| Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | Log4jJndiInjectionTest.java:462:70:462:86 | (...)... | provenance | Sink:MaD:48175 | +| Log4jJndiInjectionTest.java:462:79:462:86 | source(...) : String | Log4jJndiInjectionTest.java:462:70:462:86 | (...)... | provenance | Sink:MaD:48181 | | Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | Log4jJndiInjectionTest.java:463:55:463:71 | (...)... | provenance | Sink:MaD:2170 | -| Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | Log4jJndiInjectionTest.java:463:55:463:71 | (...)... | provenance | Sink:MaD:48175 | +| Log4jJndiInjectionTest.java:463:64:463:71 | source(...) : String | Log4jJndiInjectionTest.java:463:55:463:71 | (...)... | provenance | Sink:MaD:48181 | | Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | Log4jJndiInjectionTest.java:464:40:464:56 | (...)... | provenance | Sink:MaD:2170 | -| Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | Log4jJndiInjectionTest.java:464:40:464:56 | (...)... | provenance | Sink:MaD:48175 | +| Log4jJndiInjectionTest.java:464:49:464:56 | source(...) : String | Log4jJndiInjectionTest.java:464:40:464:56 | (...)... | provenance | Sink:MaD:48181 | | Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | Log4jJndiInjectionTest.java:465:100:465:116 | (...)... | provenance | Sink:MaD:2171 | -| Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | Log4jJndiInjectionTest.java:465:100:465:116 | (...)... | provenance | Sink:MaD:48176 | +| Log4jJndiInjectionTest.java:465:109:465:116 | source(...) : String | Log4jJndiInjectionTest.java:465:100:465:116 | (...)... | provenance | Sink:MaD:48182 | | Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | Log4jJndiInjectionTest.java:466:85:466:101 | (...)... | provenance | Sink:MaD:2171 | -| Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | Log4jJndiInjectionTest.java:466:85:466:101 | (...)... | provenance | Sink:MaD:48176 | +| Log4jJndiInjectionTest.java:466:94:466:101 | source(...) : String | Log4jJndiInjectionTest.java:466:85:466:101 | (...)... | provenance | Sink:MaD:48182 | | Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | Log4jJndiInjectionTest.java:467:70:467:86 | (...)... | provenance | Sink:MaD:2171 | -| Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | Log4jJndiInjectionTest.java:467:70:467:86 | (...)... | provenance | Sink:MaD:48176 | +| Log4jJndiInjectionTest.java:467:79:467:86 | source(...) : String | Log4jJndiInjectionTest.java:467:70:467:86 | (...)... | provenance | Sink:MaD:48182 | | Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | Log4jJndiInjectionTest.java:468:55:468:71 | (...)... | provenance | Sink:MaD:2171 | -| Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | Log4jJndiInjectionTest.java:468:55:468:71 | (...)... | provenance | Sink:MaD:48176 | +| Log4jJndiInjectionTest.java:468:64:468:71 | source(...) : String | Log4jJndiInjectionTest.java:468:55:468:71 | (...)... | provenance | Sink:MaD:48182 | | Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | Log4jJndiInjectionTest.java:469:40:469:56 | (...)... | provenance | Sink:MaD:2171 | -| Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | Log4jJndiInjectionTest.java:469:40:469:56 | (...)... | provenance | Sink:MaD:48176 | +| Log4jJndiInjectionTest.java:469:49:469:56 | source(...) : String | Log4jJndiInjectionTest.java:469:40:469:56 | (...)... | provenance | Sink:MaD:48182 | | Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | Log4jJndiInjectionTest.java:470:115:470:131 | (...)... | provenance | Sink:MaD:2172 | -| Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | Log4jJndiInjectionTest.java:470:115:470:131 | (...)... | provenance | Sink:MaD:48177 | +| Log4jJndiInjectionTest.java:470:124:470:131 | source(...) : String | Log4jJndiInjectionTest.java:470:115:470:131 | (...)... | provenance | Sink:MaD:48183 | | Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | Log4jJndiInjectionTest.java:471:100:471:116 | (...)... | provenance | Sink:MaD:2172 | -| Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | Log4jJndiInjectionTest.java:471:100:471:116 | (...)... | provenance | Sink:MaD:48177 | +| Log4jJndiInjectionTest.java:471:109:471:116 | source(...) : String | Log4jJndiInjectionTest.java:471:100:471:116 | (...)... | provenance | Sink:MaD:48183 | | Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | Log4jJndiInjectionTest.java:472:85:472:101 | (...)... | provenance | Sink:MaD:2172 | -| Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | Log4jJndiInjectionTest.java:472:85:472:101 | (...)... | provenance | Sink:MaD:48177 | +| Log4jJndiInjectionTest.java:472:94:472:101 | source(...) : String | Log4jJndiInjectionTest.java:472:85:472:101 | (...)... | provenance | Sink:MaD:48183 | | Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | Log4jJndiInjectionTest.java:473:70:473:86 | (...)... | provenance | Sink:MaD:2172 | -| Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | Log4jJndiInjectionTest.java:473:70:473:86 | (...)... | provenance | Sink:MaD:48177 | +| Log4jJndiInjectionTest.java:473:79:473:86 | source(...) : String | Log4jJndiInjectionTest.java:473:70:473:86 | (...)... | provenance | Sink:MaD:48183 | | Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | Log4jJndiInjectionTest.java:474:55:474:71 | (...)... | provenance | Sink:MaD:2172 | -| Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | Log4jJndiInjectionTest.java:474:55:474:71 | (...)... | provenance | Sink:MaD:48177 | +| Log4jJndiInjectionTest.java:474:64:474:71 | source(...) : String | Log4jJndiInjectionTest.java:474:55:474:71 | (...)... | provenance | Sink:MaD:48183 | | Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | Log4jJndiInjectionTest.java:475:40:475:56 | (...)... | provenance | Sink:MaD:2172 | -| Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | Log4jJndiInjectionTest.java:475:40:475:56 | (...)... | provenance | Sink:MaD:48177 | +| Log4jJndiInjectionTest.java:475:49:475:56 | source(...) : String | Log4jJndiInjectionTest.java:475:40:475:56 | (...)... | provenance | Sink:MaD:48183 | | Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | Log4jJndiInjectionTest.java:476:130:476:146 | (...)... | provenance | Sink:MaD:2173 | -| Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | Log4jJndiInjectionTest.java:476:130:476:146 | (...)... | provenance | Sink:MaD:48178 | +| Log4jJndiInjectionTest.java:476:139:476:146 | source(...) : String | Log4jJndiInjectionTest.java:476:130:476:146 | (...)... | provenance | Sink:MaD:48184 | | Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | Log4jJndiInjectionTest.java:477:115:477:131 | (...)... | provenance | Sink:MaD:2173 | -| Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | Log4jJndiInjectionTest.java:477:115:477:131 | (...)... | provenance | Sink:MaD:48178 | +| Log4jJndiInjectionTest.java:477:124:477:131 | source(...) : String | Log4jJndiInjectionTest.java:477:115:477:131 | (...)... | provenance | Sink:MaD:48184 | | Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | Log4jJndiInjectionTest.java:478:100:478:116 | (...)... | provenance | Sink:MaD:2173 | -| Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | Log4jJndiInjectionTest.java:478:100:478:116 | (...)... | provenance | Sink:MaD:48178 | +| Log4jJndiInjectionTest.java:478:109:478:116 | source(...) : String | Log4jJndiInjectionTest.java:478:100:478:116 | (...)... | provenance | Sink:MaD:48184 | | Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | Log4jJndiInjectionTest.java:479:85:479:101 | (...)... | provenance | Sink:MaD:2173 | -| Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | Log4jJndiInjectionTest.java:479:85:479:101 | (...)... | provenance | Sink:MaD:48178 | +| Log4jJndiInjectionTest.java:479:94:479:101 | source(...) : String | Log4jJndiInjectionTest.java:479:85:479:101 | (...)... | provenance | Sink:MaD:48184 | | Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | Log4jJndiInjectionTest.java:480:70:480:86 | (...)... | provenance | Sink:MaD:2173 | -| Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | Log4jJndiInjectionTest.java:480:70:480:86 | (...)... | provenance | Sink:MaD:48178 | +| Log4jJndiInjectionTest.java:480:79:480:86 | source(...) : String | Log4jJndiInjectionTest.java:480:70:480:86 | (...)... | provenance | Sink:MaD:48184 | | Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | Log4jJndiInjectionTest.java:481:55:481:71 | (...)... | provenance | Sink:MaD:2173 | -| Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | Log4jJndiInjectionTest.java:481:55:481:71 | (...)... | provenance | Sink:MaD:48178 | +| Log4jJndiInjectionTest.java:481:64:481:71 | source(...) : String | Log4jJndiInjectionTest.java:481:55:481:71 | (...)... | provenance | Sink:MaD:48184 | | Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | Log4jJndiInjectionTest.java:482:40:482:56 | (...)... | provenance | Sink:MaD:2173 | -| Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | Log4jJndiInjectionTest.java:482:40:482:56 | (...)... | provenance | Sink:MaD:48178 | +| Log4jJndiInjectionTest.java:482:49:482:56 | source(...) : String | Log4jJndiInjectionTest.java:482:40:482:56 | (...)... | provenance | Sink:MaD:48184 | | Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | Log4jJndiInjectionTest.java:483:145:483:161 | (...)... | provenance | Sink:MaD:2174 | -| Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | Log4jJndiInjectionTest.java:483:145:483:161 | (...)... | provenance | Sink:MaD:48179 | +| Log4jJndiInjectionTest.java:483:154:483:161 | source(...) : String | Log4jJndiInjectionTest.java:483:145:483:161 | (...)... | provenance | Sink:MaD:48185 | | Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | Log4jJndiInjectionTest.java:484:130:484:146 | (...)... | provenance | Sink:MaD:2174 | -| Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | Log4jJndiInjectionTest.java:484:130:484:146 | (...)... | provenance | Sink:MaD:48179 | +| Log4jJndiInjectionTest.java:484:139:484:146 | source(...) : String | Log4jJndiInjectionTest.java:484:130:484:146 | (...)... | provenance | Sink:MaD:48185 | | Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | Log4jJndiInjectionTest.java:485:115:485:131 | (...)... | provenance | Sink:MaD:2174 | -| Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | Log4jJndiInjectionTest.java:485:115:485:131 | (...)... | provenance | Sink:MaD:48179 | +| Log4jJndiInjectionTest.java:485:124:485:131 | source(...) : String | Log4jJndiInjectionTest.java:485:115:485:131 | (...)... | provenance | Sink:MaD:48185 | | Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | Log4jJndiInjectionTest.java:486:100:486:116 | (...)... | provenance | Sink:MaD:2174 | -| Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | Log4jJndiInjectionTest.java:486:100:486:116 | (...)... | provenance | Sink:MaD:48179 | +| Log4jJndiInjectionTest.java:486:109:486:116 | source(...) : String | Log4jJndiInjectionTest.java:486:100:486:116 | (...)... | provenance | Sink:MaD:48185 | | Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | Log4jJndiInjectionTest.java:487:85:487:101 | (...)... | provenance | Sink:MaD:2174 | -| Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | Log4jJndiInjectionTest.java:487:85:487:101 | (...)... | provenance | Sink:MaD:48179 | +| Log4jJndiInjectionTest.java:487:94:487:101 | source(...) : String | Log4jJndiInjectionTest.java:487:85:487:101 | (...)... | provenance | Sink:MaD:48185 | | Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | Log4jJndiInjectionTest.java:488:70:488:86 | (...)... | provenance | Sink:MaD:2174 | -| Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | Log4jJndiInjectionTest.java:488:70:488:86 | (...)... | provenance | Sink:MaD:48179 | +| Log4jJndiInjectionTest.java:488:79:488:86 | source(...) : String | Log4jJndiInjectionTest.java:488:70:488:86 | (...)... | provenance | Sink:MaD:48185 | | Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | Log4jJndiInjectionTest.java:489:55:489:71 | (...)... | provenance | Sink:MaD:2174 | -| Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | Log4jJndiInjectionTest.java:489:55:489:71 | (...)... | provenance | Sink:MaD:48179 | +| Log4jJndiInjectionTest.java:489:64:489:71 | source(...) : String | Log4jJndiInjectionTest.java:489:55:489:71 | (...)... | provenance | Sink:MaD:48185 | | Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | Log4jJndiInjectionTest.java:490:40:490:56 | (...)... | provenance | Sink:MaD:2174 | -| Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | Log4jJndiInjectionTest.java:490:40:490:56 | (...)... | provenance | Sink:MaD:48179 | +| Log4jJndiInjectionTest.java:490:49:490:56 | source(...) : String | Log4jJndiInjectionTest.java:490:40:490:56 | (...)... | provenance | Sink:MaD:48185 | | Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | Log4jJndiInjectionTest.java:491:160:491:176 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | Log4jJndiInjectionTest.java:491:160:491:176 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:491:169:491:176 | source(...) : String | Log4jJndiInjectionTest.java:491:160:491:176 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | Log4jJndiInjectionTest.java:492:145:492:161 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | Log4jJndiInjectionTest.java:492:145:492:161 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:492:154:492:161 | source(...) : String | Log4jJndiInjectionTest.java:492:145:492:161 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | Log4jJndiInjectionTest.java:493:130:493:146 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | Log4jJndiInjectionTest.java:493:130:493:146 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:493:139:493:146 | source(...) : String | Log4jJndiInjectionTest.java:493:130:493:146 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | Log4jJndiInjectionTest.java:494:115:494:131 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | Log4jJndiInjectionTest.java:494:115:494:131 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:494:124:494:131 | source(...) : String | Log4jJndiInjectionTest.java:494:115:494:131 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | Log4jJndiInjectionTest.java:495:100:495:116 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | Log4jJndiInjectionTest.java:495:100:495:116 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:495:109:495:116 | source(...) : String | Log4jJndiInjectionTest.java:495:100:495:116 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | Log4jJndiInjectionTest.java:496:85:496:101 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | Log4jJndiInjectionTest.java:496:85:496:101 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:496:94:496:101 | source(...) : String | Log4jJndiInjectionTest.java:496:85:496:101 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | Log4jJndiInjectionTest.java:497:70:497:86 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | Log4jJndiInjectionTest.java:497:70:497:86 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:497:79:497:86 | source(...) : String | Log4jJndiInjectionTest.java:497:70:497:86 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | Log4jJndiInjectionTest.java:498:55:498:71 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | Log4jJndiInjectionTest.java:498:55:498:71 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:498:64:498:71 | source(...) : String | Log4jJndiInjectionTest.java:498:55:498:71 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | Log4jJndiInjectionTest.java:499:40:499:56 | (...)... | provenance | Sink:MaD:2175 | -| Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | Log4jJndiInjectionTest.java:499:40:499:56 | (...)... | provenance | Sink:MaD:48180 | +| Log4jJndiInjectionTest.java:499:49:499:56 | source(...) : String | Log4jJndiInjectionTest.java:499:40:499:56 | (...)... | provenance | Sink:MaD:48186 | | Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | Log4jJndiInjectionTest.java:500:175:500:191 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | Log4jJndiInjectionTest.java:500:175:500:191 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:500:184:500:191 | source(...) : String | Log4jJndiInjectionTest.java:500:175:500:191 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | Log4jJndiInjectionTest.java:501:160:501:176 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | Log4jJndiInjectionTest.java:501:160:501:176 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:501:169:501:176 | source(...) : String | Log4jJndiInjectionTest.java:501:160:501:176 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | Log4jJndiInjectionTest.java:502:145:502:161 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | Log4jJndiInjectionTest.java:502:145:502:161 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:502:154:502:161 | source(...) : String | Log4jJndiInjectionTest.java:502:145:502:161 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | Log4jJndiInjectionTest.java:503:130:503:146 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | Log4jJndiInjectionTest.java:503:130:503:146 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:503:139:503:146 | source(...) : String | Log4jJndiInjectionTest.java:503:130:503:146 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | Log4jJndiInjectionTest.java:504:115:504:131 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | Log4jJndiInjectionTest.java:504:115:504:131 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:504:124:504:131 | source(...) : String | Log4jJndiInjectionTest.java:504:115:504:131 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | Log4jJndiInjectionTest.java:505:100:505:116 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | Log4jJndiInjectionTest.java:505:100:505:116 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:505:109:505:116 | source(...) : String | Log4jJndiInjectionTest.java:505:100:505:116 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | Log4jJndiInjectionTest.java:506:85:506:101 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | Log4jJndiInjectionTest.java:506:85:506:101 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:506:94:506:101 | source(...) : String | Log4jJndiInjectionTest.java:506:85:506:101 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | Log4jJndiInjectionTest.java:507:70:507:86 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | Log4jJndiInjectionTest.java:507:70:507:86 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:507:79:507:86 | source(...) : String | Log4jJndiInjectionTest.java:507:70:507:86 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | Log4jJndiInjectionTest.java:508:55:508:71 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | Log4jJndiInjectionTest.java:508:55:508:71 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:508:64:508:71 | source(...) : String | Log4jJndiInjectionTest.java:508:55:508:71 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | Log4jJndiInjectionTest.java:509:40:509:56 | (...)... | provenance | Sink:MaD:2176 | -| Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | Log4jJndiInjectionTest.java:509:40:509:56 | (...)... | provenance | Sink:MaD:48181 | +| Log4jJndiInjectionTest.java:509:49:509:56 | source(...) : String | Log4jJndiInjectionTest.java:509:40:509:56 | (...)... | provenance | Sink:MaD:48187 | | Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | Log4jJndiInjectionTest.java:510:40:510:56 | (...)... | provenance | Sink:MaD:2168 | -| Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | Log4jJndiInjectionTest.java:510:40:510:56 | (...)... | provenance | Sink:MaD:48173 | +| Log4jJndiInjectionTest.java:510:49:510:56 | source(...) : String | Log4jJndiInjectionTest.java:510:40:510:56 | (...)... | provenance | Sink:MaD:48179 | | Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | Log4jJndiInjectionTest.java:511:55:511:76 | (...)... | provenance | Sink:MaD:2168 | -| Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | Log4jJndiInjectionTest.java:511:55:511:76 | (...)... | provenance | Sink:MaD:48173 | +| Log4jJndiInjectionTest.java:511:69:511:76 | source(...) : String | Log4jJndiInjectionTest.java:511:55:511:76 | (...)... | provenance | Sink:MaD:48179 | | Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | Log4jJndiInjectionTest.java:512:40:512:56 | (...)... | provenance | Sink:MaD:2180 | -| Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | Log4jJndiInjectionTest.java:512:40:512:56 | (...)... | provenance | Sink:MaD:48185 | +| Log4jJndiInjectionTest.java:512:49:512:56 | source(...) : String | Log4jJndiInjectionTest.java:512:40:512:56 | (...)... | provenance | Sink:MaD:48191 | | Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | Log4jJndiInjectionTest.java:513:40:513:61 | (...)... | provenance | Sink:MaD:2181 | -| Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | Log4jJndiInjectionTest.java:513:40:513:61 | (...)... | provenance | Sink:MaD:48186 | +| Log4jJndiInjectionTest.java:513:54:513:61 | source(...) : String | Log4jJndiInjectionTest.java:513:40:513:61 | (...)... | provenance | Sink:MaD:48192 | | Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | Log4jJndiInjectionTest.java:514:40:514:61 | (...)... | provenance | Sink:MaD:2182 | -| Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | Log4jJndiInjectionTest.java:514:40:514:61 | (...)... | provenance | Sink:MaD:48187 | +| Log4jJndiInjectionTest.java:514:54:514:61 | source(...) : String | Log4jJndiInjectionTest.java:514:40:514:61 | (...)... | provenance | Sink:MaD:48193 | | Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | Log4jJndiInjectionTest.java:515:25:515:50 | (...)... | provenance | Sink:MaD:2185 | -| Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | Log4jJndiInjectionTest.java:515:25:515:50 | (...)... | provenance | Sink:MaD:48190 | +| Log4jJndiInjectionTest.java:515:43:515:50 | source(...) : String | Log4jJndiInjectionTest.java:515:25:515:50 | (...)... | provenance | Sink:MaD:48196 | | Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | Log4jJndiInjectionTest.java:516:25:516:50 | (...)... | provenance | Sink:MaD:2186 | -| Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | Log4jJndiInjectionTest.java:516:25:516:50 | (...)... | provenance | Sink:MaD:48191 | +| Log4jJndiInjectionTest.java:516:43:516:50 | source(...) : String | Log4jJndiInjectionTest.java:516:25:516:50 | (...)... | provenance | Sink:MaD:48197 | | Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | Log4jJndiInjectionTest.java:517:25:517:42 | (...)... | provenance | Sink:MaD:2183 | -| Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | Log4jJndiInjectionTest.java:517:25:517:42 | (...)... | provenance | Sink:MaD:48188 | +| Log4jJndiInjectionTest.java:517:35:517:42 | source(...) : String | Log4jJndiInjectionTest.java:517:25:517:42 | (...)... | provenance | Sink:MaD:48194 | | Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | Log4jJndiInjectionTest.java:518:25:518:42 | (...)... | provenance | Sink:MaD:2184 | -| Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | Log4jJndiInjectionTest.java:518:25:518:42 | (...)... | provenance | Sink:MaD:48189 | +| Log4jJndiInjectionTest.java:518:35:518:42 | source(...) : String | Log4jJndiInjectionTest.java:518:25:518:42 | (...)... | provenance | Sink:MaD:48195 | | Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | Log4jJndiInjectionTest.java:521:25:521:41 | (...)... | provenance | Sink:MaD:2189 | -| Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | Log4jJndiInjectionTest.java:521:25:521:41 | (...)... | provenance | Sink:MaD:48194 | +| Log4jJndiInjectionTest.java:521:34:521:41 | source(...) : String | Log4jJndiInjectionTest.java:521:25:521:41 | (...)... | provenance | Sink:MaD:48200 | | Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | Log4jJndiInjectionTest.java:522:25:522:41 | (...)... | provenance | Sink:MaD:2200 | -| Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | Log4jJndiInjectionTest.java:522:25:522:41 | (...)... | provenance | Sink:MaD:48205 | +| Log4jJndiInjectionTest.java:522:34:522:41 | source(...) : String | Log4jJndiInjectionTest.java:522:25:522:41 | (...)... | provenance | Sink:MaD:48211 | | Log4jJndiInjectionTest.java:523:40:523:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:523:40:523:62 | new Object[] | provenance | Sink:MaD:2200 | -| Log4jJndiInjectionTest.java:523:40:523:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:523:40:523:62 | new Object[] | provenance | Sink:MaD:48205 | +| Log4jJndiInjectionTest.java:523:40:523:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:523:40:523:62 | new Object[] | provenance | Sink:MaD:48211 | | Log4jJndiInjectionTest.java:523:54:523:61 | source(...) : String | Log4jJndiInjectionTest.java:523:40:523:62 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | Log4jJndiInjectionTest.java:524:40:524:56 | (...)... | provenance | Sink:MaD:2190 | -| Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | Log4jJndiInjectionTest.java:524:40:524:56 | (...)... | provenance | Sink:MaD:48195 | +| Log4jJndiInjectionTest.java:524:49:524:56 | source(...) : String | Log4jJndiInjectionTest.java:524:40:524:56 | (...)... | provenance | Sink:MaD:48201 | | Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | Log4jJndiInjectionTest.java:525:25:525:41 | (...)... | provenance | Sink:MaD:2190 | -| Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | Log4jJndiInjectionTest.java:525:25:525:41 | (...)... | provenance | Sink:MaD:48195 | +| Log4jJndiInjectionTest.java:525:34:525:41 | source(...) : String | Log4jJndiInjectionTest.java:525:25:525:41 | (...)... | provenance | Sink:MaD:48201 | | Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | Log4jJndiInjectionTest.java:526:55:526:71 | (...)... | provenance | Sink:MaD:2191 | -| Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | Log4jJndiInjectionTest.java:526:55:526:71 | (...)... | provenance | Sink:MaD:48196 | +| Log4jJndiInjectionTest.java:526:64:526:71 | source(...) : String | Log4jJndiInjectionTest.java:526:55:526:71 | (...)... | provenance | Sink:MaD:48202 | | Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | Log4jJndiInjectionTest.java:527:40:527:56 | (...)... | provenance | Sink:MaD:2191 | -| Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | Log4jJndiInjectionTest.java:527:40:527:56 | (...)... | provenance | Sink:MaD:48196 | +| Log4jJndiInjectionTest.java:527:49:527:56 | source(...) : String | Log4jJndiInjectionTest.java:527:40:527:56 | (...)... | provenance | Sink:MaD:48202 | | Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | Log4jJndiInjectionTest.java:528:25:528:41 | (...)... | provenance | Sink:MaD:2191 | -| Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | Log4jJndiInjectionTest.java:528:25:528:41 | (...)... | provenance | Sink:MaD:48196 | +| Log4jJndiInjectionTest.java:528:34:528:41 | source(...) : String | Log4jJndiInjectionTest.java:528:25:528:41 | (...)... | provenance | Sink:MaD:48202 | | Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | Log4jJndiInjectionTest.java:529:70:529:86 | (...)... | provenance | Sink:MaD:2192 | -| Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | Log4jJndiInjectionTest.java:529:70:529:86 | (...)... | provenance | Sink:MaD:48197 | +| Log4jJndiInjectionTest.java:529:79:529:86 | source(...) : String | Log4jJndiInjectionTest.java:529:70:529:86 | (...)... | provenance | Sink:MaD:48203 | | Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | Log4jJndiInjectionTest.java:530:55:530:71 | (...)... | provenance | Sink:MaD:2192 | -| Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | Log4jJndiInjectionTest.java:530:55:530:71 | (...)... | provenance | Sink:MaD:48197 | +| Log4jJndiInjectionTest.java:530:64:530:71 | source(...) : String | Log4jJndiInjectionTest.java:530:55:530:71 | (...)... | provenance | Sink:MaD:48203 | | Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | Log4jJndiInjectionTest.java:531:40:531:56 | (...)... | provenance | Sink:MaD:2192 | -| Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | Log4jJndiInjectionTest.java:531:40:531:56 | (...)... | provenance | Sink:MaD:48197 | +| Log4jJndiInjectionTest.java:531:49:531:56 | source(...) : String | Log4jJndiInjectionTest.java:531:40:531:56 | (...)... | provenance | Sink:MaD:48203 | | Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | Log4jJndiInjectionTest.java:532:25:532:41 | (...)... | provenance | Sink:MaD:2192 | -| Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | Log4jJndiInjectionTest.java:532:25:532:41 | (...)... | provenance | Sink:MaD:48197 | +| Log4jJndiInjectionTest.java:532:34:532:41 | source(...) : String | Log4jJndiInjectionTest.java:532:25:532:41 | (...)... | provenance | Sink:MaD:48203 | | Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | Log4jJndiInjectionTest.java:533:85:533:101 | (...)... | provenance | Sink:MaD:2193 | -| Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | Log4jJndiInjectionTest.java:533:85:533:101 | (...)... | provenance | Sink:MaD:48198 | +| Log4jJndiInjectionTest.java:533:94:533:101 | source(...) : String | Log4jJndiInjectionTest.java:533:85:533:101 | (...)... | provenance | Sink:MaD:48204 | | Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | Log4jJndiInjectionTest.java:534:70:534:86 | (...)... | provenance | Sink:MaD:2193 | -| Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | Log4jJndiInjectionTest.java:534:70:534:86 | (...)... | provenance | Sink:MaD:48198 | +| Log4jJndiInjectionTest.java:534:79:534:86 | source(...) : String | Log4jJndiInjectionTest.java:534:70:534:86 | (...)... | provenance | Sink:MaD:48204 | | Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | Log4jJndiInjectionTest.java:535:55:535:71 | (...)... | provenance | Sink:MaD:2193 | -| Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | Log4jJndiInjectionTest.java:535:55:535:71 | (...)... | provenance | Sink:MaD:48198 | +| Log4jJndiInjectionTest.java:535:64:535:71 | source(...) : String | Log4jJndiInjectionTest.java:535:55:535:71 | (...)... | provenance | Sink:MaD:48204 | | Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | Log4jJndiInjectionTest.java:536:40:536:56 | (...)... | provenance | Sink:MaD:2193 | -| Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | Log4jJndiInjectionTest.java:536:40:536:56 | (...)... | provenance | Sink:MaD:48198 | +| Log4jJndiInjectionTest.java:536:49:536:56 | source(...) : String | Log4jJndiInjectionTest.java:536:40:536:56 | (...)... | provenance | Sink:MaD:48204 | | Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | Log4jJndiInjectionTest.java:537:25:537:41 | (...)... | provenance | Sink:MaD:2193 | -| Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | Log4jJndiInjectionTest.java:537:25:537:41 | (...)... | provenance | Sink:MaD:48198 | +| Log4jJndiInjectionTest.java:537:34:537:41 | source(...) : String | Log4jJndiInjectionTest.java:537:25:537:41 | (...)... | provenance | Sink:MaD:48204 | | Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | Log4jJndiInjectionTest.java:538:100:538:116 | (...)... | provenance | Sink:MaD:2194 | -| Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | Log4jJndiInjectionTest.java:538:100:538:116 | (...)... | provenance | Sink:MaD:48199 | +| Log4jJndiInjectionTest.java:538:109:538:116 | source(...) : String | Log4jJndiInjectionTest.java:538:100:538:116 | (...)... | provenance | Sink:MaD:48205 | | Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | Log4jJndiInjectionTest.java:539:85:539:101 | (...)... | provenance | Sink:MaD:2194 | -| Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | Log4jJndiInjectionTest.java:539:85:539:101 | (...)... | provenance | Sink:MaD:48199 | +| Log4jJndiInjectionTest.java:539:94:539:101 | source(...) : String | Log4jJndiInjectionTest.java:539:85:539:101 | (...)... | provenance | Sink:MaD:48205 | | Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | Log4jJndiInjectionTest.java:540:70:540:86 | (...)... | provenance | Sink:MaD:2194 | -| Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | Log4jJndiInjectionTest.java:540:70:540:86 | (...)... | provenance | Sink:MaD:48199 | +| Log4jJndiInjectionTest.java:540:79:540:86 | source(...) : String | Log4jJndiInjectionTest.java:540:70:540:86 | (...)... | provenance | Sink:MaD:48205 | | Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | Log4jJndiInjectionTest.java:541:55:541:71 | (...)... | provenance | Sink:MaD:2194 | -| Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | Log4jJndiInjectionTest.java:541:55:541:71 | (...)... | provenance | Sink:MaD:48199 | +| Log4jJndiInjectionTest.java:541:64:541:71 | source(...) : String | Log4jJndiInjectionTest.java:541:55:541:71 | (...)... | provenance | Sink:MaD:48205 | | Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | Log4jJndiInjectionTest.java:542:40:542:56 | (...)... | provenance | Sink:MaD:2194 | -| Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | Log4jJndiInjectionTest.java:542:40:542:56 | (...)... | provenance | Sink:MaD:48199 | +| Log4jJndiInjectionTest.java:542:49:542:56 | source(...) : String | Log4jJndiInjectionTest.java:542:40:542:56 | (...)... | provenance | Sink:MaD:48205 | | Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | Log4jJndiInjectionTest.java:543:25:543:41 | (...)... | provenance | Sink:MaD:2194 | -| Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | Log4jJndiInjectionTest.java:543:25:543:41 | (...)... | provenance | Sink:MaD:48199 | +| Log4jJndiInjectionTest.java:543:34:543:41 | source(...) : String | Log4jJndiInjectionTest.java:543:25:543:41 | (...)... | provenance | Sink:MaD:48205 | | Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | Log4jJndiInjectionTest.java:544:115:544:131 | (...)... | provenance | Sink:MaD:2195 | -| Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | Log4jJndiInjectionTest.java:544:115:544:131 | (...)... | provenance | Sink:MaD:48200 | +| Log4jJndiInjectionTest.java:544:124:544:131 | source(...) : String | Log4jJndiInjectionTest.java:544:115:544:131 | (...)... | provenance | Sink:MaD:48206 | | Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | Log4jJndiInjectionTest.java:545:100:545:116 | (...)... | provenance | Sink:MaD:2195 | -| Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | Log4jJndiInjectionTest.java:545:100:545:116 | (...)... | provenance | Sink:MaD:48200 | +| Log4jJndiInjectionTest.java:545:109:545:116 | source(...) : String | Log4jJndiInjectionTest.java:545:100:545:116 | (...)... | provenance | Sink:MaD:48206 | | Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | Log4jJndiInjectionTest.java:546:85:546:101 | (...)... | provenance | Sink:MaD:2195 | -| Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | Log4jJndiInjectionTest.java:546:85:546:101 | (...)... | provenance | Sink:MaD:48200 | +| Log4jJndiInjectionTest.java:546:94:546:101 | source(...) : String | Log4jJndiInjectionTest.java:546:85:546:101 | (...)... | provenance | Sink:MaD:48206 | | Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | Log4jJndiInjectionTest.java:547:70:547:86 | (...)... | provenance | Sink:MaD:2195 | -| Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | Log4jJndiInjectionTest.java:547:70:547:86 | (...)... | provenance | Sink:MaD:48200 | +| Log4jJndiInjectionTest.java:547:79:547:86 | source(...) : String | Log4jJndiInjectionTest.java:547:70:547:86 | (...)... | provenance | Sink:MaD:48206 | | Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | Log4jJndiInjectionTest.java:548:55:548:71 | (...)... | provenance | Sink:MaD:2195 | -| Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | Log4jJndiInjectionTest.java:548:55:548:71 | (...)... | provenance | Sink:MaD:48200 | +| Log4jJndiInjectionTest.java:548:64:548:71 | source(...) : String | Log4jJndiInjectionTest.java:548:55:548:71 | (...)... | provenance | Sink:MaD:48206 | | Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | Log4jJndiInjectionTest.java:549:40:549:56 | (...)... | provenance | Sink:MaD:2195 | -| Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | Log4jJndiInjectionTest.java:549:40:549:56 | (...)... | provenance | Sink:MaD:48200 | +| Log4jJndiInjectionTest.java:549:49:549:56 | source(...) : String | Log4jJndiInjectionTest.java:549:40:549:56 | (...)... | provenance | Sink:MaD:48206 | | Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | Log4jJndiInjectionTest.java:550:25:550:41 | (...)... | provenance | Sink:MaD:2195 | -| Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | Log4jJndiInjectionTest.java:550:25:550:41 | (...)... | provenance | Sink:MaD:48200 | +| Log4jJndiInjectionTest.java:550:34:550:41 | source(...) : String | Log4jJndiInjectionTest.java:550:25:550:41 | (...)... | provenance | Sink:MaD:48206 | | Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | Log4jJndiInjectionTest.java:551:130:551:146 | (...)... | provenance | Sink:MaD:2196 | -| Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | Log4jJndiInjectionTest.java:551:130:551:146 | (...)... | provenance | Sink:MaD:48201 | +| Log4jJndiInjectionTest.java:551:139:551:146 | source(...) : String | Log4jJndiInjectionTest.java:551:130:551:146 | (...)... | provenance | Sink:MaD:48207 | | Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | Log4jJndiInjectionTest.java:552:115:552:131 | (...)... | provenance | Sink:MaD:2196 | -| Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | Log4jJndiInjectionTest.java:552:115:552:131 | (...)... | provenance | Sink:MaD:48201 | +| Log4jJndiInjectionTest.java:552:124:552:131 | source(...) : String | Log4jJndiInjectionTest.java:552:115:552:131 | (...)... | provenance | Sink:MaD:48207 | | Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | Log4jJndiInjectionTest.java:553:100:553:116 | (...)... | provenance | Sink:MaD:2196 | -| Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | Log4jJndiInjectionTest.java:553:100:553:116 | (...)... | provenance | Sink:MaD:48201 | +| Log4jJndiInjectionTest.java:553:109:553:116 | source(...) : String | Log4jJndiInjectionTest.java:553:100:553:116 | (...)... | provenance | Sink:MaD:48207 | | Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | Log4jJndiInjectionTest.java:554:85:554:101 | (...)... | provenance | Sink:MaD:2196 | -| Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | Log4jJndiInjectionTest.java:554:85:554:101 | (...)... | provenance | Sink:MaD:48201 | +| Log4jJndiInjectionTest.java:554:94:554:101 | source(...) : String | Log4jJndiInjectionTest.java:554:85:554:101 | (...)... | provenance | Sink:MaD:48207 | | Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | Log4jJndiInjectionTest.java:555:70:555:86 | (...)... | provenance | Sink:MaD:2196 | -| Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | Log4jJndiInjectionTest.java:555:70:555:86 | (...)... | provenance | Sink:MaD:48201 | +| Log4jJndiInjectionTest.java:555:79:555:86 | source(...) : String | Log4jJndiInjectionTest.java:555:70:555:86 | (...)... | provenance | Sink:MaD:48207 | | Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | Log4jJndiInjectionTest.java:556:55:556:71 | (...)... | provenance | Sink:MaD:2196 | -| Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | Log4jJndiInjectionTest.java:556:55:556:71 | (...)... | provenance | Sink:MaD:48201 | +| Log4jJndiInjectionTest.java:556:64:556:71 | source(...) : String | Log4jJndiInjectionTest.java:556:55:556:71 | (...)... | provenance | Sink:MaD:48207 | | Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | Log4jJndiInjectionTest.java:557:40:557:56 | (...)... | provenance | Sink:MaD:2196 | -| Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | Log4jJndiInjectionTest.java:557:40:557:56 | (...)... | provenance | Sink:MaD:48201 | +| Log4jJndiInjectionTest.java:557:49:557:56 | source(...) : String | Log4jJndiInjectionTest.java:557:40:557:56 | (...)... | provenance | Sink:MaD:48207 | | Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | Log4jJndiInjectionTest.java:558:25:558:41 | (...)... | provenance | Sink:MaD:2196 | -| Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | Log4jJndiInjectionTest.java:558:25:558:41 | (...)... | provenance | Sink:MaD:48201 | +| Log4jJndiInjectionTest.java:558:34:558:41 | source(...) : String | Log4jJndiInjectionTest.java:558:25:558:41 | (...)... | provenance | Sink:MaD:48207 | | Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | Log4jJndiInjectionTest.java:559:145:559:161 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | Log4jJndiInjectionTest.java:559:145:559:161 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:559:154:559:161 | source(...) : String | Log4jJndiInjectionTest.java:559:145:559:161 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | Log4jJndiInjectionTest.java:560:130:560:146 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | Log4jJndiInjectionTest.java:560:130:560:146 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:560:139:560:146 | source(...) : String | Log4jJndiInjectionTest.java:560:130:560:146 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | Log4jJndiInjectionTest.java:561:115:561:131 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | Log4jJndiInjectionTest.java:561:115:561:131 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:561:124:561:131 | source(...) : String | Log4jJndiInjectionTest.java:561:115:561:131 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | Log4jJndiInjectionTest.java:562:100:562:116 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | Log4jJndiInjectionTest.java:562:100:562:116 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:562:109:562:116 | source(...) : String | Log4jJndiInjectionTest.java:562:100:562:116 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | Log4jJndiInjectionTest.java:563:85:563:101 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | Log4jJndiInjectionTest.java:563:85:563:101 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:563:94:563:101 | source(...) : String | Log4jJndiInjectionTest.java:563:85:563:101 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | Log4jJndiInjectionTest.java:564:70:564:86 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | Log4jJndiInjectionTest.java:564:70:564:86 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:564:79:564:86 | source(...) : String | Log4jJndiInjectionTest.java:564:70:564:86 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | Log4jJndiInjectionTest.java:565:55:565:71 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | Log4jJndiInjectionTest.java:565:55:565:71 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:565:64:565:71 | source(...) : String | Log4jJndiInjectionTest.java:565:55:565:71 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | Log4jJndiInjectionTest.java:566:40:566:56 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | Log4jJndiInjectionTest.java:566:40:566:56 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:566:49:566:56 | source(...) : String | Log4jJndiInjectionTest.java:566:40:566:56 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | Log4jJndiInjectionTest.java:567:25:567:41 | (...)... | provenance | Sink:MaD:2197 | -| Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | Log4jJndiInjectionTest.java:567:25:567:41 | (...)... | provenance | Sink:MaD:48202 | +| Log4jJndiInjectionTest.java:567:34:567:41 | source(...) : String | Log4jJndiInjectionTest.java:567:25:567:41 | (...)... | provenance | Sink:MaD:48208 | | Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | Log4jJndiInjectionTest.java:568:160:568:176 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | Log4jJndiInjectionTest.java:568:160:568:176 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:568:169:568:176 | source(...) : String | Log4jJndiInjectionTest.java:568:160:568:176 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | Log4jJndiInjectionTest.java:569:145:569:161 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | Log4jJndiInjectionTest.java:569:145:569:161 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:569:154:569:161 | source(...) : String | Log4jJndiInjectionTest.java:569:145:569:161 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | Log4jJndiInjectionTest.java:570:130:570:146 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | Log4jJndiInjectionTest.java:570:130:570:146 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:570:139:570:146 | source(...) : String | Log4jJndiInjectionTest.java:570:130:570:146 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | Log4jJndiInjectionTest.java:571:115:571:131 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | Log4jJndiInjectionTest.java:571:115:571:131 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:571:124:571:131 | source(...) : String | Log4jJndiInjectionTest.java:571:115:571:131 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | Log4jJndiInjectionTest.java:572:100:572:116 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | Log4jJndiInjectionTest.java:572:100:572:116 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:572:109:572:116 | source(...) : String | Log4jJndiInjectionTest.java:572:100:572:116 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | Log4jJndiInjectionTest.java:573:85:573:101 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | Log4jJndiInjectionTest.java:573:85:573:101 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:573:94:573:101 | source(...) : String | Log4jJndiInjectionTest.java:573:85:573:101 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | Log4jJndiInjectionTest.java:574:70:574:86 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | Log4jJndiInjectionTest.java:574:70:574:86 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:574:79:574:86 | source(...) : String | Log4jJndiInjectionTest.java:574:70:574:86 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | Log4jJndiInjectionTest.java:575:55:575:71 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | Log4jJndiInjectionTest.java:575:55:575:71 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:575:64:575:71 | source(...) : String | Log4jJndiInjectionTest.java:575:55:575:71 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | Log4jJndiInjectionTest.java:576:40:576:56 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | Log4jJndiInjectionTest.java:576:40:576:56 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:576:49:576:56 | source(...) : String | Log4jJndiInjectionTest.java:576:40:576:56 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | Log4jJndiInjectionTest.java:577:25:577:41 | (...)... | provenance | Sink:MaD:2198 | -| Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | Log4jJndiInjectionTest.java:577:25:577:41 | (...)... | provenance | Sink:MaD:48203 | +| Log4jJndiInjectionTest.java:577:34:577:41 | source(...) : String | Log4jJndiInjectionTest.java:577:25:577:41 | (...)... | provenance | Sink:MaD:48209 | | Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | Log4jJndiInjectionTest.java:578:25:578:41 | (...)... | provenance | Sink:MaD:2190 | -| Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | Log4jJndiInjectionTest.java:578:25:578:41 | (...)... | provenance | Sink:MaD:48195 | +| Log4jJndiInjectionTest.java:578:34:578:41 | source(...) : String | Log4jJndiInjectionTest.java:578:25:578:41 | (...)... | provenance | Sink:MaD:48201 | | Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | Log4jJndiInjectionTest.java:579:40:579:61 | (...)... | provenance | Sink:MaD:2190 | -| Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | Log4jJndiInjectionTest.java:579:40:579:61 | (...)... | provenance | Sink:MaD:48195 | +| Log4jJndiInjectionTest.java:579:54:579:61 | source(...) : String | Log4jJndiInjectionTest.java:579:40:579:61 | (...)... | provenance | Sink:MaD:48201 | | Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | Log4jJndiInjectionTest.java:580:25:580:41 | (...)... | provenance | Sink:MaD:2202 | -| Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | Log4jJndiInjectionTest.java:580:25:580:41 | (...)... | provenance | Sink:MaD:48207 | +| Log4jJndiInjectionTest.java:580:34:580:41 | source(...) : String | Log4jJndiInjectionTest.java:580:25:580:41 | (...)... | provenance | Sink:MaD:48213 | | Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | Log4jJndiInjectionTest.java:581:25:581:46 | (...)... | provenance | Sink:MaD:2203 | -| Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | Log4jJndiInjectionTest.java:581:25:581:46 | (...)... | provenance | Sink:MaD:48208 | +| Log4jJndiInjectionTest.java:581:39:581:46 | source(...) : String | Log4jJndiInjectionTest.java:581:25:581:46 | (...)... | provenance | Sink:MaD:48214 | | Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | Log4jJndiInjectionTest.java:582:25:582:46 | (...)... | provenance | Sink:MaD:2204 | -| Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | Log4jJndiInjectionTest.java:582:25:582:46 | (...)... | provenance | Sink:MaD:48209 | +| Log4jJndiInjectionTest.java:582:39:582:46 | source(...) : String | Log4jJndiInjectionTest.java:582:25:582:46 | (...)... | provenance | Sink:MaD:48215 | | Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | Log4jJndiInjectionTest.java:583:38:583:60 | (...)... | provenance | Sink:MaD:2205 | -| Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | Log4jJndiInjectionTest.java:583:38:583:60 | (...)... | provenance | Sink:MaD:48210 | +| Log4jJndiInjectionTest.java:583:53:583:60 | source(...) : String | Log4jJndiInjectionTest.java:583:38:583:60 | (...)... | provenance | Sink:MaD:48216 | | Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | Log4jJndiInjectionTest.java:584:38:584:60 | (...)... | provenance | Sink:MaD:2206 | -| Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | Log4jJndiInjectionTest.java:584:38:584:60 | (...)... | provenance | Sink:MaD:48211 | +| Log4jJndiInjectionTest.java:584:53:584:60 | source(...) : String | Log4jJndiInjectionTest.java:584:38:584:60 | (...)... | provenance | Sink:MaD:48217 | | Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | Log4jJndiInjectionTest.java:585:53:585:75 | (...)... | provenance | Sink:MaD:2207 | -| Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | Log4jJndiInjectionTest.java:585:53:585:75 | (...)... | provenance | Sink:MaD:48212 | +| Log4jJndiInjectionTest.java:585:68:585:75 | source(...) : String | Log4jJndiInjectionTest.java:585:53:585:75 | (...)... | provenance | Sink:MaD:48218 | | Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | Log4jJndiInjectionTest.java:586:53:586:75 | (...)... | provenance | Sink:MaD:2208 | -| Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | Log4jJndiInjectionTest.java:586:53:586:75 | (...)... | provenance | Sink:MaD:48213 | +| Log4jJndiInjectionTest.java:586:68:586:75 | source(...) : String | Log4jJndiInjectionTest.java:586:53:586:75 | (...)... | provenance | Sink:MaD:48219 | | Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | Log4jJndiInjectionTest.java:587:53:587:70 | (...)... | provenance | Sink:MaD:2209 | -| Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | Log4jJndiInjectionTest.java:587:53:587:70 | (...)... | provenance | Sink:MaD:48214 | +| Log4jJndiInjectionTest.java:587:63:587:70 | source(...) : String | Log4jJndiInjectionTest.java:587:53:587:70 | (...)... | provenance | Sink:MaD:48220 | | Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | Log4jJndiInjectionTest.java:588:53:588:78 | (...)... | provenance | Sink:MaD:2210 | -| Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | Log4jJndiInjectionTest.java:588:53:588:78 | (...)... | provenance | Sink:MaD:48215 | +| Log4jJndiInjectionTest.java:588:71:588:78 | source(...) : String | Log4jJndiInjectionTest.java:588:53:588:78 | (...)... | provenance | Sink:MaD:48221 | | Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | Log4jJndiInjectionTest.java:589:53:589:78 | (...)... | provenance | Sink:MaD:2211 | -| Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | Log4jJndiInjectionTest.java:589:53:589:78 | (...)... | provenance | Sink:MaD:48216 | +| Log4jJndiInjectionTest.java:589:71:589:78 | source(...) : String | Log4jJndiInjectionTest.java:589:53:589:78 | (...)... | provenance | Sink:MaD:48222 | | Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | Log4jJndiInjectionTest.java:591:53:591:69 | (...)... | provenance | Sink:MaD:2214 | -| Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | Log4jJndiInjectionTest.java:591:53:591:69 | (...)... | provenance | Sink:MaD:48219 | +| Log4jJndiInjectionTest.java:591:62:591:69 | source(...) : String | Log4jJndiInjectionTest.java:591:53:591:69 | (...)... | provenance | Sink:MaD:48225 | | Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | Log4jJndiInjectionTest.java:592:53:592:69 | (...)... | provenance | Sink:MaD:2225 | -| Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | Log4jJndiInjectionTest.java:592:53:592:69 | (...)... | provenance | Sink:MaD:48230 | +| Log4jJndiInjectionTest.java:592:62:592:69 | source(...) : String | Log4jJndiInjectionTest.java:592:53:592:69 | (...)... | provenance | Sink:MaD:48236 | | Log4jJndiInjectionTest.java:593:68:593:90 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:593:68:593:90 | new Object[] | provenance | Sink:MaD:2225 | -| Log4jJndiInjectionTest.java:593:68:593:90 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:593:68:593:90 | new Object[] | provenance | Sink:MaD:48230 | +| Log4jJndiInjectionTest.java:593:68:593:90 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:593:68:593:90 | new Object[] | provenance | Sink:MaD:48236 | | Log4jJndiInjectionTest.java:593:82:593:89 | source(...) : String | Log4jJndiInjectionTest.java:593:68:593:90 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | Log4jJndiInjectionTest.java:594:68:594:84 | (...)... | provenance | Sink:MaD:2215 | -| Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | Log4jJndiInjectionTest.java:594:68:594:84 | (...)... | provenance | Sink:MaD:48220 | +| Log4jJndiInjectionTest.java:594:77:594:84 | source(...) : String | Log4jJndiInjectionTest.java:594:68:594:84 | (...)... | provenance | Sink:MaD:48226 | | Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | Log4jJndiInjectionTest.java:595:53:595:69 | (...)... | provenance | Sink:MaD:2215 | -| Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | Log4jJndiInjectionTest.java:595:53:595:69 | (...)... | provenance | Sink:MaD:48220 | +| Log4jJndiInjectionTest.java:595:62:595:69 | source(...) : String | Log4jJndiInjectionTest.java:595:53:595:69 | (...)... | provenance | Sink:MaD:48226 | | Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | Log4jJndiInjectionTest.java:596:83:596:99 | (...)... | provenance | Sink:MaD:2216 | -| Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | Log4jJndiInjectionTest.java:596:83:596:99 | (...)... | provenance | Sink:MaD:48221 | +| Log4jJndiInjectionTest.java:596:92:596:99 | source(...) : String | Log4jJndiInjectionTest.java:596:83:596:99 | (...)... | provenance | Sink:MaD:48227 | | Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | Log4jJndiInjectionTest.java:597:68:597:84 | (...)... | provenance | Sink:MaD:2216 | -| Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | Log4jJndiInjectionTest.java:597:68:597:84 | (...)... | provenance | Sink:MaD:48221 | +| Log4jJndiInjectionTest.java:597:77:597:84 | source(...) : String | Log4jJndiInjectionTest.java:597:68:597:84 | (...)... | provenance | Sink:MaD:48227 | | Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | Log4jJndiInjectionTest.java:598:53:598:69 | (...)... | provenance | Sink:MaD:2216 | -| Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | Log4jJndiInjectionTest.java:598:53:598:69 | (...)... | provenance | Sink:MaD:48221 | +| Log4jJndiInjectionTest.java:598:62:598:69 | source(...) : String | Log4jJndiInjectionTest.java:598:53:598:69 | (...)... | provenance | Sink:MaD:48227 | | Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | Log4jJndiInjectionTest.java:599:98:599:114 | (...)... | provenance | Sink:MaD:2217 | -| Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | Log4jJndiInjectionTest.java:599:98:599:114 | (...)... | provenance | Sink:MaD:48222 | +| Log4jJndiInjectionTest.java:599:107:599:114 | source(...) : String | Log4jJndiInjectionTest.java:599:98:599:114 | (...)... | provenance | Sink:MaD:48228 | | Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | Log4jJndiInjectionTest.java:600:83:600:99 | (...)... | provenance | Sink:MaD:2217 | -| Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | Log4jJndiInjectionTest.java:600:83:600:99 | (...)... | provenance | Sink:MaD:48222 | +| Log4jJndiInjectionTest.java:600:92:600:99 | source(...) : String | Log4jJndiInjectionTest.java:600:83:600:99 | (...)... | provenance | Sink:MaD:48228 | | Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | Log4jJndiInjectionTest.java:601:68:601:84 | (...)... | provenance | Sink:MaD:2217 | -| Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | Log4jJndiInjectionTest.java:601:68:601:84 | (...)... | provenance | Sink:MaD:48222 | +| Log4jJndiInjectionTest.java:601:77:601:84 | source(...) : String | Log4jJndiInjectionTest.java:601:68:601:84 | (...)... | provenance | Sink:MaD:48228 | | Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | Log4jJndiInjectionTest.java:602:53:602:69 | (...)... | provenance | Sink:MaD:2217 | -| Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | Log4jJndiInjectionTest.java:602:53:602:69 | (...)... | provenance | Sink:MaD:48222 | +| Log4jJndiInjectionTest.java:602:62:602:69 | source(...) : String | Log4jJndiInjectionTest.java:602:53:602:69 | (...)... | provenance | Sink:MaD:48228 | | Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | Log4jJndiInjectionTest.java:603:113:603:129 | (...)... | provenance | Sink:MaD:2218 | -| Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | Log4jJndiInjectionTest.java:603:113:603:129 | (...)... | provenance | Sink:MaD:48223 | +| Log4jJndiInjectionTest.java:603:122:603:129 | source(...) : String | Log4jJndiInjectionTest.java:603:113:603:129 | (...)... | provenance | Sink:MaD:48229 | | Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | Log4jJndiInjectionTest.java:604:98:604:114 | (...)... | provenance | Sink:MaD:2218 | -| Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | Log4jJndiInjectionTest.java:604:98:604:114 | (...)... | provenance | Sink:MaD:48223 | +| Log4jJndiInjectionTest.java:604:107:604:114 | source(...) : String | Log4jJndiInjectionTest.java:604:98:604:114 | (...)... | provenance | Sink:MaD:48229 | | Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | Log4jJndiInjectionTest.java:605:83:605:99 | (...)... | provenance | Sink:MaD:2218 | -| Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | Log4jJndiInjectionTest.java:605:83:605:99 | (...)... | provenance | Sink:MaD:48223 | +| Log4jJndiInjectionTest.java:605:92:605:99 | source(...) : String | Log4jJndiInjectionTest.java:605:83:605:99 | (...)... | provenance | Sink:MaD:48229 | | Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | Log4jJndiInjectionTest.java:606:68:606:84 | (...)... | provenance | Sink:MaD:2218 | -| Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | Log4jJndiInjectionTest.java:606:68:606:84 | (...)... | provenance | Sink:MaD:48223 | +| Log4jJndiInjectionTest.java:606:77:606:84 | source(...) : String | Log4jJndiInjectionTest.java:606:68:606:84 | (...)... | provenance | Sink:MaD:48229 | | Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | Log4jJndiInjectionTest.java:607:53:607:69 | (...)... | provenance | Sink:MaD:2218 | -| Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | Log4jJndiInjectionTest.java:607:53:607:69 | (...)... | provenance | Sink:MaD:48223 | +| Log4jJndiInjectionTest.java:607:62:607:69 | source(...) : String | Log4jJndiInjectionTest.java:607:53:607:69 | (...)... | provenance | Sink:MaD:48229 | | Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | Log4jJndiInjectionTest.java:608:128:608:144 | (...)... | provenance | Sink:MaD:2219 | -| Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | Log4jJndiInjectionTest.java:608:128:608:144 | (...)... | provenance | Sink:MaD:48224 | +| Log4jJndiInjectionTest.java:608:137:608:144 | source(...) : String | Log4jJndiInjectionTest.java:608:128:608:144 | (...)... | provenance | Sink:MaD:48230 | | Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | Log4jJndiInjectionTest.java:609:113:609:129 | (...)... | provenance | Sink:MaD:2219 | -| Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | Log4jJndiInjectionTest.java:609:113:609:129 | (...)... | provenance | Sink:MaD:48224 | +| Log4jJndiInjectionTest.java:609:122:609:129 | source(...) : String | Log4jJndiInjectionTest.java:609:113:609:129 | (...)... | provenance | Sink:MaD:48230 | | Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | Log4jJndiInjectionTest.java:610:98:610:114 | (...)... | provenance | Sink:MaD:2219 | -| Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | Log4jJndiInjectionTest.java:610:98:610:114 | (...)... | provenance | Sink:MaD:48224 | +| Log4jJndiInjectionTest.java:610:107:610:114 | source(...) : String | Log4jJndiInjectionTest.java:610:98:610:114 | (...)... | provenance | Sink:MaD:48230 | | Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | Log4jJndiInjectionTest.java:611:83:611:99 | (...)... | provenance | Sink:MaD:2219 | -| Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | Log4jJndiInjectionTest.java:611:83:611:99 | (...)... | provenance | Sink:MaD:48224 | +| Log4jJndiInjectionTest.java:611:92:611:99 | source(...) : String | Log4jJndiInjectionTest.java:611:83:611:99 | (...)... | provenance | Sink:MaD:48230 | | Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | Log4jJndiInjectionTest.java:612:68:612:84 | (...)... | provenance | Sink:MaD:2219 | -| Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | Log4jJndiInjectionTest.java:612:68:612:84 | (...)... | provenance | Sink:MaD:48224 | +| Log4jJndiInjectionTest.java:612:77:612:84 | source(...) : String | Log4jJndiInjectionTest.java:612:68:612:84 | (...)... | provenance | Sink:MaD:48230 | | Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | Log4jJndiInjectionTest.java:613:53:613:69 | (...)... | provenance | Sink:MaD:2219 | -| Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | Log4jJndiInjectionTest.java:613:53:613:69 | (...)... | provenance | Sink:MaD:48224 | +| Log4jJndiInjectionTest.java:613:62:613:69 | source(...) : String | Log4jJndiInjectionTest.java:613:53:613:69 | (...)... | provenance | Sink:MaD:48230 | | Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | Log4jJndiInjectionTest.java:614:143:614:159 | (...)... | provenance | Sink:MaD:2220 | -| Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | Log4jJndiInjectionTest.java:614:143:614:159 | (...)... | provenance | Sink:MaD:48225 | +| Log4jJndiInjectionTest.java:614:152:614:159 | source(...) : String | Log4jJndiInjectionTest.java:614:143:614:159 | (...)... | provenance | Sink:MaD:48231 | | Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | Log4jJndiInjectionTest.java:615:128:615:144 | (...)... | provenance | Sink:MaD:2220 | -| Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | Log4jJndiInjectionTest.java:615:128:615:144 | (...)... | provenance | Sink:MaD:48225 | +| Log4jJndiInjectionTest.java:615:137:615:144 | source(...) : String | Log4jJndiInjectionTest.java:615:128:615:144 | (...)... | provenance | Sink:MaD:48231 | | Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | Log4jJndiInjectionTest.java:616:113:616:129 | (...)... | provenance | Sink:MaD:2220 | -| Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | Log4jJndiInjectionTest.java:616:113:616:129 | (...)... | provenance | Sink:MaD:48225 | +| Log4jJndiInjectionTest.java:616:122:616:129 | source(...) : String | Log4jJndiInjectionTest.java:616:113:616:129 | (...)... | provenance | Sink:MaD:48231 | | Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | Log4jJndiInjectionTest.java:617:98:617:114 | (...)... | provenance | Sink:MaD:2220 | -| Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | Log4jJndiInjectionTest.java:617:98:617:114 | (...)... | provenance | Sink:MaD:48225 | +| Log4jJndiInjectionTest.java:617:107:617:114 | source(...) : String | Log4jJndiInjectionTest.java:617:98:617:114 | (...)... | provenance | Sink:MaD:48231 | | Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | Log4jJndiInjectionTest.java:618:83:618:99 | (...)... | provenance | Sink:MaD:2220 | -| Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | Log4jJndiInjectionTest.java:618:83:618:99 | (...)... | provenance | Sink:MaD:48225 | +| Log4jJndiInjectionTest.java:618:92:618:99 | source(...) : String | Log4jJndiInjectionTest.java:618:83:618:99 | (...)... | provenance | Sink:MaD:48231 | | Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | Log4jJndiInjectionTest.java:619:68:619:84 | (...)... | provenance | Sink:MaD:2220 | -| Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | Log4jJndiInjectionTest.java:619:68:619:84 | (...)... | provenance | Sink:MaD:48225 | +| Log4jJndiInjectionTest.java:619:77:619:84 | source(...) : String | Log4jJndiInjectionTest.java:619:68:619:84 | (...)... | provenance | Sink:MaD:48231 | | Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | Log4jJndiInjectionTest.java:620:53:620:69 | (...)... | provenance | Sink:MaD:2220 | -| Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | Log4jJndiInjectionTest.java:620:53:620:69 | (...)... | provenance | Sink:MaD:48225 | +| Log4jJndiInjectionTest.java:620:62:620:69 | source(...) : String | Log4jJndiInjectionTest.java:620:53:620:69 | (...)... | provenance | Sink:MaD:48231 | | Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | Log4jJndiInjectionTest.java:621:158:621:174 | (...)... | provenance | Sink:MaD:2221 | -| Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | Log4jJndiInjectionTest.java:621:158:621:174 | (...)... | provenance | Sink:MaD:48226 | +| Log4jJndiInjectionTest.java:621:167:621:174 | source(...) : String | Log4jJndiInjectionTest.java:621:158:621:174 | (...)... | provenance | Sink:MaD:48232 | | Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | Log4jJndiInjectionTest.java:622:143:622:159 | (...)... | provenance | Sink:MaD:2221 | -| Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | Log4jJndiInjectionTest.java:622:143:622:159 | (...)... | provenance | Sink:MaD:48226 | +| Log4jJndiInjectionTest.java:622:152:622:159 | source(...) : String | Log4jJndiInjectionTest.java:622:143:622:159 | (...)... | provenance | Sink:MaD:48232 | | Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | Log4jJndiInjectionTest.java:623:128:623:144 | (...)... | provenance | Sink:MaD:2221 | -| Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | Log4jJndiInjectionTest.java:623:128:623:144 | (...)... | provenance | Sink:MaD:48226 | +| Log4jJndiInjectionTest.java:623:137:623:144 | source(...) : String | Log4jJndiInjectionTest.java:623:128:623:144 | (...)... | provenance | Sink:MaD:48232 | | Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | Log4jJndiInjectionTest.java:624:113:624:129 | (...)... | provenance | Sink:MaD:2221 | -| Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | Log4jJndiInjectionTest.java:624:113:624:129 | (...)... | provenance | Sink:MaD:48226 | +| Log4jJndiInjectionTest.java:624:122:624:129 | source(...) : String | Log4jJndiInjectionTest.java:624:113:624:129 | (...)... | provenance | Sink:MaD:48232 | | Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | Log4jJndiInjectionTest.java:625:98:625:114 | (...)... | provenance | Sink:MaD:2221 | -| Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | Log4jJndiInjectionTest.java:625:98:625:114 | (...)... | provenance | Sink:MaD:48226 | +| Log4jJndiInjectionTest.java:625:107:625:114 | source(...) : String | Log4jJndiInjectionTest.java:625:98:625:114 | (...)... | provenance | Sink:MaD:48232 | | Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | Log4jJndiInjectionTest.java:626:83:626:99 | (...)... | provenance | Sink:MaD:2221 | -| Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | Log4jJndiInjectionTest.java:626:83:626:99 | (...)... | provenance | Sink:MaD:48226 | +| Log4jJndiInjectionTest.java:626:92:626:99 | source(...) : String | Log4jJndiInjectionTest.java:626:83:626:99 | (...)... | provenance | Sink:MaD:48232 | | Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | Log4jJndiInjectionTest.java:627:68:627:84 | (...)... | provenance | Sink:MaD:2221 | -| Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | Log4jJndiInjectionTest.java:627:68:627:84 | (...)... | provenance | Sink:MaD:48226 | +| Log4jJndiInjectionTest.java:627:77:627:84 | source(...) : String | Log4jJndiInjectionTest.java:627:68:627:84 | (...)... | provenance | Sink:MaD:48232 | | Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | Log4jJndiInjectionTest.java:628:53:628:69 | (...)... | provenance | Sink:MaD:2221 | -| Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | Log4jJndiInjectionTest.java:628:53:628:69 | (...)... | provenance | Sink:MaD:48226 | +| Log4jJndiInjectionTest.java:628:62:628:69 | source(...) : String | Log4jJndiInjectionTest.java:628:53:628:69 | (...)... | provenance | Sink:MaD:48232 | | Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | Log4jJndiInjectionTest.java:629:173:629:189 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | Log4jJndiInjectionTest.java:629:173:629:189 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:629:182:629:189 | source(...) : String | Log4jJndiInjectionTest.java:629:173:629:189 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | Log4jJndiInjectionTest.java:630:158:630:174 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | Log4jJndiInjectionTest.java:630:158:630:174 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:630:167:630:174 | source(...) : String | Log4jJndiInjectionTest.java:630:158:630:174 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | Log4jJndiInjectionTest.java:631:143:631:159 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | Log4jJndiInjectionTest.java:631:143:631:159 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:631:152:631:159 | source(...) : String | Log4jJndiInjectionTest.java:631:143:631:159 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | Log4jJndiInjectionTest.java:632:128:632:144 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | Log4jJndiInjectionTest.java:632:128:632:144 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:632:137:632:144 | source(...) : String | Log4jJndiInjectionTest.java:632:128:632:144 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | Log4jJndiInjectionTest.java:633:113:633:129 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | Log4jJndiInjectionTest.java:633:113:633:129 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:633:122:633:129 | source(...) : String | Log4jJndiInjectionTest.java:633:113:633:129 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | Log4jJndiInjectionTest.java:634:98:634:114 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | Log4jJndiInjectionTest.java:634:98:634:114 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:634:107:634:114 | source(...) : String | Log4jJndiInjectionTest.java:634:98:634:114 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | Log4jJndiInjectionTest.java:635:83:635:99 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | Log4jJndiInjectionTest.java:635:83:635:99 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:635:92:635:99 | source(...) : String | Log4jJndiInjectionTest.java:635:83:635:99 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | Log4jJndiInjectionTest.java:636:68:636:84 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | Log4jJndiInjectionTest.java:636:68:636:84 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:636:77:636:84 | source(...) : String | Log4jJndiInjectionTest.java:636:68:636:84 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | Log4jJndiInjectionTest.java:637:53:637:69 | (...)... | provenance | Sink:MaD:2222 | -| Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | Log4jJndiInjectionTest.java:637:53:637:69 | (...)... | provenance | Sink:MaD:48227 | +| Log4jJndiInjectionTest.java:637:62:637:69 | source(...) : String | Log4jJndiInjectionTest.java:637:53:637:69 | (...)... | provenance | Sink:MaD:48233 | | Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | Log4jJndiInjectionTest.java:638:188:638:204 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | Log4jJndiInjectionTest.java:638:188:638:204 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:638:197:638:204 | source(...) : String | Log4jJndiInjectionTest.java:638:188:638:204 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | Log4jJndiInjectionTest.java:639:173:639:189 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | Log4jJndiInjectionTest.java:639:173:639:189 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:639:182:639:189 | source(...) : String | Log4jJndiInjectionTest.java:639:173:639:189 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | Log4jJndiInjectionTest.java:640:158:640:174 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | Log4jJndiInjectionTest.java:640:158:640:174 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:640:167:640:174 | source(...) : String | Log4jJndiInjectionTest.java:640:158:640:174 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | Log4jJndiInjectionTest.java:641:143:641:159 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | Log4jJndiInjectionTest.java:641:143:641:159 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:641:152:641:159 | source(...) : String | Log4jJndiInjectionTest.java:641:143:641:159 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | Log4jJndiInjectionTest.java:642:128:642:144 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | Log4jJndiInjectionTest.java:642:128:642:144 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:642:137:642:144 | source(...) : String | Log4jJndiInjectionTest.java:642:128:642:144 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | Log4jJndiInjectionTest.java:643:113:643:129 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | Log4jJndiInjectionTest.java:643:113:643:129 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:643:122:643:129 | source(...) : String | Log4jJndiInjectionTest.java:643:113:643:129 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | Log4jJndiInjectionTest.java:644:98:644:114 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | Log4jJndiInjectionTest.java:644:98:644:114 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:644:107:644:114 | source(...) : String | Log4jJndiInjectionTest.java:644:98:644:114 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | Log4jJndiInjectionTest.java:645:83:645:99 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | Log4jJndiInjectionTest.java:645:83:645:99 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:645:92:645:99 | source(...) : String | Log4jJndiInjectionTest.java:645:83:645:99 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | Log4jJndiInjectionTest.java:646:68:646:84 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | Log4jJndiInjectionTest.java:646:68:646:84 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:646:77:646:84 | source(...) : String | Log4jJndiInjectionTest.java:646:68:646:84 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | Log4jJndiInjectionTest.java:647:53:647:69 | (...)... | provenance | Sink:MaD:2223 | -| Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | Log4jJndiInjectionTest.java:647:53:647:69 | (...)... | provenance | Sink:MaD:48228 | +| Log4jJndiInjectionTest.java:647:62:647:69 | source(...) : String | Log4jJndiInjectionTest.java:647:53:647:69 | (...)... | provenance | Sink:MaD:48234 | | Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | Log4jJndiInjectionTest.java:648:53:648:69 | (...)... | provenance | Sink:MaD:2215 | -| Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | Log4jJndiInjectionTest.java:648:53:648:69 | (...)... | provenance | Sink:MaD:48220 | +| Log4jJndiInjectionTest.java:648:62:648:69 | source(...) : String | Log4jJndiInjectionTest.java:648:53:648:69 | (...)... | provenance | Sink:MaD:48226 | | Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | Log4jJndiInjectionTest.java:649:68:649:89 | (...)... | provenance | Sink:MaD:2215 | -| Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | Log4jJndiInjectionTest.java:649:68:649:89 | (...)... | provenance | Sink:MaD:48220 | +| Log4jJndiInjectionTest.java:649:82:649:89 | source(...) : String | Log4jJndiInjectionTest.java:649:68:649:89 | (...)... | provenance | Sink:MaD:48226 | | Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | Log4jJndiInjectionTest.java:650:53:650:69 | (...)... | provenance | Sink:MaD:2227 | -| Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | Log4jJndiInjectionTest.java:650:53:650:69 | (...)... | provenance | Sink:MaD:48232 | +| Log4jJndiInjectionTest.java:650:62:650:69 | source(...) : String | Log4jJndiInjectionTest.java:650:53:650:69 | (...)... | provenance | Sink:MaD:48238 | | Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | Log4jJndiInjectionTest.java:651:53:651:74 | (...)... | provenance | Sink:MaD:2228 | -| Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | Log4jJndiInjectionTest.java:651:53:651:74 | (...)... | provenance | Sink:MaD:48233 | +| Log4jJndiInjectionTest.java:651:67:651:74 | source(...) : String | Log4jJndiInjectionTest.java:651:53:651:74 | (...)... | provenance | Sink:MaD:48239 | | Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | Log4jJndiInjectionTest.java:652:53:652:74 | (...)... | provenance | Sink:MaD:2229 | -| Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | Log4jJndiInjectionTest.java:652:53:652:74 | (...)... | provenance | Sink:MaD:48234 | +| Log4jJndiInjectionTest.java:652:67:652:74 | source(...) : String | Log4jJndiInjectionTest.java:652:53:652:74 | (...)... | provenance | Sink:MaD:48240 | | Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | Log4jJndiInjectionTest.java:653:38:653:63 | (...)... | provenance | Sink:MaD:2232 | -| Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | Log4jJndiInjectionTest.java:653:38:653:63 | (...)... | provenance | Sink:MaD:48237 | +| Log4jJndiInjectionTest.java:653:56:653:63 | source(...) : String | Log4jJndiInjectionTest.java:653:38:653:63 | (...)... | provenance | Sink:MaD:48243 | | Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | Log4jJndiInjectionTest.java:654:38:654:63 | (...)... | provenance | Sink:MaD:2233 | -| Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | Log4jJndiInjectionTest.java:654:38:654:63 | (...)... | provenance | Sink:MaD:48238 | +| Log4jJndiInjectionTest.java:654:56:654:63 | source(...) : String | Log4jJndiInjectionTest.java:654:38:654:63 | (...)... | provenance | Sink:MaD:48244 | | Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | Log4jJndiInjectionTest.java:655:38:655:55 | (...)... | provenance | Sink:MaD:2230 | -| Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | Log4jJndiInjectionTest.java:655:38:655:55 | (...)... | provenance | Sink:MaD:48235 | +| Log4jJndiInjectionTest.java:655:48:655:55 | source(...) : String | Log4jJndiInjectionTest.java:655:38:655:55 | (...)... | provenance | Sink:MaD:48241 | | Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | Log4jJndiInjectionTest.java:656:38:656:55 | (...)... | provenance | Sink:MaD:2231 | -| Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | Log4jJndiInjectionTest.java:656:38:656:55 | (...)... | provenance | Sink:MaD:48236 | +| Log4jJndiInjectionTest.java:656:48:656:55 | source(...) : String | Log4jJndiInjectionTest.java:656:38:656:55 | (...)... | provenance | Sink:MaD:48242 | | Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | Log4jJndiInjectionTest.java:659:38:659:54 | (...)... | provenance | Sink:MaD:2236 | -| Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | Log4jJndiInjectionTest.java:659:38:659:54 | (...)... | provenance | Sink:MaD:48241 | +| Log4jJndiInjectionTest.java:659:47:659:54 | source(...) : String | Log4jJndiInjectionTest.java:659:38:659:54 | (...)... | provenance | Sink:MaD:48247 | | Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | Log4jJndiInjectionTest.java:660:38:660:54 | (...)... | provenance | Sink:MaD:2247 | -| Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | Log4jJndiInjectionTest.java:660:38:660:54 | (...)... | provenance | Sink:MaD:48252 | +| Log4jJndiInjectionTest.java:660:47:660:54 | source(...) : String | Log4jJndiInjectionTest.java:660:38:660:54 | (...)... | provenance | Sink:MaD:48258 | | Log4jJndiInjectionTest.java:661:53:661:75 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:661:53:661:75 | new Object[] | provenance | Sink:MaD:2247 | -| Log4jJndiInjectionTest.java:661:53:661:75 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:661:53:661:75 | new Object[] | provenance | Sink:MaD:48252 | +| Log4jJndiInjectionTest.java:661:53:661:75 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:661:53:661:75 | new Object[] | provenance | Sink:MaD:48258 | | Log4jJndiInjectionTest.java:661:67:661:74 | source(...) : String | Log4jJndiInjectionTest.java:661:53:661:75 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | Log4jJndiInjectionTest.java:662:53:662:69 | (...)... | provenance | Sink:MaD:2237 | -| Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | Log4jJndiInjectionTest.java:662:53:662:69 | (...)... | provenance | Sink:MaD:48242 | +| Log4jJndiInjectionTest.java:662:62:662:69 | source(...) : String | Log4jJndiInjectionTest.java:662:53:662:69 | (...)... | provenance | Sink:MaD:48248 | | Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | Log4jJndiInjectionTest.java:663:38:663:54 | (...)... | provenance | Sink:MaD:2237 | -| Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | Log4jJndiInjectionTest.java:663:38:663:54 | (...)... | provenance | Sink:MaD:48242 | +| Log4jJndiInjectionTest.java:663:47:663:54 | source(...) : String | Log4jJndiInjectionTest.java:663:38:663:54 | (...)... | provenance | Sink:MaD:48248 | | Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | Log4jJndiInjectionTest.java:664:68:664:84 | (...)... | provenance | Sink:MaD:2238 | -| Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | Log4jJndiInjectionTest.java:664:68:664:84 | (...)... | provenance | Sink:MaD:48243 | +| Log4jJndiInjectionTest.java:664:77:664:84 | source(...) : String | Log4jJndiInjectionTest.java:664:68:664:84 | (...)... | provenance | Sink:MaD:48249 | | Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | Log4jJndiInjectionTest.java:665:53:665:69 | (...)... | provenance | Sink:MaD:2238 | -| Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | Log4jJndiInjectionTest.java:665:53:665:69 | (...)... | provenance | Sink:MaD:48243 | +| Log4jJndiInjectionTest.java:665:62:665:69 | source(...) : String | Log4jJndiInjectionTest.java:665:53:665:69 | (...)... | provenance | Sink:MaD:48249 | | Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | Log4jJndiInjectionTest.java:666:38:666:54 | (...)... | provenance | Sink:MaD:2238 | -| Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | Log4jJndiInjectionTest.java:666:38:666:54 | (...)... | provenance | Sink:MaD:48243 | +| Log4jJndiInjectionTest.java:666:47:666:54 | source(...) : String | Log4jJndiInjectionTest.java:666:38:666:54 | (...)... | provenance | Sink:MaD:48249 | | Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | Log4jJndiInjectionTest.java:667:83:667:99 | (...)... | provenance | Sink:MaD:2239 | -| Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | Log4jJndiInjectionTest.java:667:83:667:99 | (...)... | provenance | Sink:MaD:48244 | +| Log4jJndiInjectionTest.java:667:92:667:99 | source(...) : String | Log4jJndiInjectionTest.java:667:83:667:99 | (...)... | provenance | Sink:MaD:48250 | | Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | Log4jJndiInjectionTest.java:668:68:668:84 | (...)... | provenance | Sink:MaD:2239 | -| Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | Log4jJndiInjectionTest.java:668:68:668:84 | (...)... | provenance | Sink:MaD:48244 | +| Log4jJndiInjectionTest.java:668:77:668:84 | source(...) : String | Log4jJndiInjectionTest.java:668:68:668:84 | (...)... | provenance | Sink:MaD:48250 | | Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | Log4jJndiInjectionTest.java:669:53:669:69 | (...)... | provenance | Sink:MaD:2239 | -| Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | Log4jJndiInjectionTest.java:669:53:669:69 | (...)... | provenance | Sink:MaD:48244 | +| Log4jJndiInjectionTest.java:669:62:669:69 | source(...) : String | Log4jJndiInjectionTest.java:669:53:669:69 | (...)... | provenance | Sink:MaD:48250 | | Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | Log4jJndiInjectionTest.java:670:38:670:54 | (...)... | provenance | Sink:MaD:2239 | -| Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | Log4jJndiInjectionTest.java:670:38:670:54 | (...)... | provenance | Sink:MaD:48244 | +| Log4jJndiInjectionTest.java:670:47:670:54 | source(...) : String | Log4jJndiInjectionTest.java:670:38:670:54 | (...)... | provenance | Sink:MaD:48250 | | Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | Log4jJndiInjectionTest.java:671:98:671:114 | (...)... | provenance | Sink:MaD:2240 | -| Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | Log4jJndiInjectionTest.java:671:98:671:114 | (...)... | provenance | Sink:MaD:48245 | +| Log4jJndiInjectionTest.java:671:107:671:114 | source(...) : String | Log4jJndiInjectionTest.java:671:98:671:114 | (...)... | provenance | Sink:MaD:48251 | | Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | Log4jJndiInjectionTest.java:672:83:672:99 | (...)... | provenance | Sink:MaD:2240 | -| Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | Log4jJndiInjectionTest.java:672:83:672:99 | (...)... | provenance | Sink:MaD:48245 | +| Log4jJndiInjectionTest.java:672:92:672:99 | source(...) : String | Log4jJndiInjectionTest.java:672:83:672:99 | (...)... | provenance | Sink:MaD:48251 | | Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | Log4jJndiInjectionTest.java:673:68:673:84 | (...)... | provenance | Sink:MaD:2240 | -| Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | Log4jJndiInjectionTest.java:673:68:673:84 | (...)... | provenance | Sink:MaD:48245 | +| Log4jJndiInjectionTest.java:673:77:673:84 | source(...) : String | Log4jJndiInjectionTest.java:673:68:673:84 | (...)... | provenance | Sink:MaD:48251 | | Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | Log4jJndiInjectionTest.java:674:53:674:69 | (...)... | provenance | Sink:MaD:2240 | -| Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | Log4jJndiInjectionTest.java:674:53:674:69 | (...)... | provenance | Sink:MaD:48245 | +| Log4jJndiInjectionTest.java:674:62:674:69 | source(...) : String | Log4jJndiInjectionTest.java:674:53:674:69 | (...)... | provenance | Sink:MaD:48251 | | Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | Log4jJndiInjectionTest.java:675:38:675:54 | (...)... | provenance | Sink:MaD:2240 | -| Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | Log4jJndiInjectionTest.java:675:38:675:54 | (...)... | provenance | Sink:MaD:48245 | +| Log4jJndiInjectionTest.java:675:47:675:54 | source(...) : String | Log4jJndiInjectionTest.java:675:38:675:54 | (...)... | provenance | Sink:MaD:48251 | | Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | Log4jJndiInjectionTest.java:676:113:676:129 | (...)... | provenance | Sink:MaD:2241 | -| Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | Log4jJndiInjectionTest.java:676:113:676:129 | (...)... | provenance | Sink:MaD:48246 | +| Log4jJndiInjectionTest.java:676:122:676:129 | source(...) : String | Log4jJndiInjectionTest.java:676:113:676:129 | (...)... | provenance | Sink:MaD:48252 | | Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | Log4jJndiInjectionTest.java:677:98:677:114 | (...)... | provenance | Sink:MaD:2241 | -| Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | Log4jJndiInjectionTest.java:677:98:677:114 | (...)... | provenance | Sink:MaD:48246 | +| Log4jJndiInjectionTest.java:677:107:677:114 | source(...) : String | Log4jJndiInjectionTest.java:677:98:677:114 | (...)... | provenance | Sink:MaD:48252 | | Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | Log4jJndiInjectionTest.java:678:83:678:99 | (...)... | provenance | Sink:MaD:2241 | -| Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | Log4jJndiInjectionTest.java:678:83:678:99 | (...)... | provenance | Sink:MaD:48246 | +| Log4jJndiInjectionTest.java:678:92:678:99 | source(...) : String | Log4jJndiInjectionTest.java:678:83:678:99 | (...)... | provenance | Sink:MaD:48252 | | Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | Log4jJndiInjectionTest.java:679:68:679:84 | (...)... | provenance | Sink:MaD:2241 | -| Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | Log4jJndiInjectionTest.java:679:68:679:84 | (...)... | provenance | Sink:MaD:48246 | +| Log4jJndiInjectionTest.java:679:77:679:84 | source(...) : String | Log4jJndiInjectionTest.java:679:68:679:84 | (...)... | provenance | Sink:MaD:48252 | | Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | Log4jJndiInjectionTest.java:680:53:680:69 | (...)... | provenance | Sink:MaD:2241 | -| Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | Log4jJndiInjectionTest.java:680:53:680:69 | (...)... | provenance | Sink:MaD:48246 | +| Log4jJndiInjectionTest.java:680:62:680:69 | source(...) : String | Log4jJndiInjectionTest.java:680:53:680:69 | (...)... | provenance | Sink:MaD:48252 | | Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | Log4jJndiInjectionTest.java:681:38:681:54 | (...)... | provenance | Sink:MaD:2241 | -| Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | Log4jJndiInjectionTest.java:681:38:681:54 | (...)... | provenance | Sink:MaD:48246 | +| Log4jJndiInjectionTest.java:681:47:681:54 | source(...) : String | Log4jJndiInjectionTest.java:681:38:681:54 | (...)... | provenance | Sink:MaD:48252 | | Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | Log4jJndiInjectionTest.java:682:128:682:144 | (...)... | provenance | Sink:MaD:2242 | -| Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | Log4jJndiInjectionTest.java:682:128:682:144 | (...)... | provenance | Sink:MaD:48247 | +| Log4jJndiInjectionTest.java:682:137:682:144 | source(...) : String | Log4jJndiInjectionTest.java:682:128:682:144 | (...)... | provenance | Sink:MaD:48253 | | Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | Log4jJndiInjectionTest.java:683:113:683:129 | (...)... | provenance | Sink:MaD:2242 | -| Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | Log4jJndiInjectionTest.java:683:113:683:129 | (...)... | provenance | Sink:MaD:48247 | +| Log4jJndiInjectionTest.java:683:122:683:129 | source(...) : String | Log4jJndiInjectionTest.java:683:113:683:129 | (...)... | provenance | Sink:MaD:48253 | | Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | Log4jJndiInjectionTest.java:684:98:684:114 | (...)... | provenance | Sink:MaD:2242 | -| Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | Log4jJndiInjectionTest.java:684:98:684:114 | (...)... | provenance | Sink:MaD:48247 | +| Log4jJndiInjectionTest.java:684:107:684:114 | source(...) : String | Log4jJndiInjectionTest.java:684:98:684:114 | (...)... | provenance | Sink:MaD:48253 | | Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | Log4jJndiInjectionTest.java:685:83:685:99 | (...)... | provenance | Sink:MaD:2242 | -| Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | Log4jJndiInjectionTest.java:685:83:685:99 | (...)... | provenance | Sink:MaD:48247 | +| Log4jJndiInjectionTest.java:685:92:685:99 | source(...) : String | Log4jJndiInjectionTest.java:685:83:685:99 | (...)... | provenance | Sink:MaD:48253 | | Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | Log4jJndiInjectionTest.java:686:68:686:84 | (...)... | provenance | Sink:MaD:2242 | -| Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | Log4jJndiInjectionTest.java:686:68:686:84 | (...)... | provenance | Sink:MaD:48247 | +| Log4jJndiInjectionTest.java:686:77:686:84 | source(...) : String | Log4jJndiInjectionTest.java:686:68:686:84 | (...)... | provenance | Sink:MaD:48253 | | Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | Log4jJndiInjectionTest.java:687:53:687:69 | (...)... | provenance | Sink:MaD:2242 | -| Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | Log4jJndiInjectionTest.java:687:53:687:69 | (...)... | provenance | Sink:MaD:48247 | +| Log4jJndiInjectionTest.java:687:62:687:69 | source(...) : String | Log4jJndiInjectionTest.java:687:53:687:69 | (...)... | provenance | Sink:MaD:48253 | | Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | Log4jJndiInjectionTest.java:688:38:688:54 | (...)... | provenance | Sink:MaD:2242 | -| Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | Log4jJndiInjectionTest.java:688:38:688:54 | (...)... | provenance | Sink:MaD:48247 | +| Log4jJndiInjectionTest.java:688:47:688:54 | source(...) : String | Log4jJndiInjectionTest.java:688:38:688:54 | (...)... | provenance | Sink:MaD:48253 | | Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | Log4jJndiInjectionTest.java:689:143:689:159 | (...)... | provenance | Sink:MaD:2243 | -| Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | Log4jJndiInjectionTest.java:689:143:689:159 | (...)... | provenance | Sink:MaD:48248 | +| Log4jJndiInjectionTest.java:689:152:689:159 | source(...) : String | Log4jJndiInjectionTest.java:689:143:689:159 | (...)... | provenance | Sink:MaD:48254 | | Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | Log4jJndiInjectionTest.java:690:128:690:144 | (...)... | provenance | Sink:MaD:2243 | -| Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | Log4jJndiInjectionTest.java:690:128:690:144 | (...)... | provenance | Sink:MaD:48248 | +| Log4jJndiInjectionTest.java:690:137:690:144 | source(...) : String | Log4jJndiInjectionTest.java:690:128:690:144 | (...)... | provenance | Sink:MaD:48254 | | Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | Log4jJndiInjectionTest.java:691:113:691:129 | (...)... | provenance | Sink:MaD:2243 | -| Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | Log4jJndiInjectionTest.java:691:113:691:129 | (...)... | provenance | Sink:MaD:48248 | +| Log4jJndiInjectionTest.java:691:122:691:129 | source(...) : String | Log4jJndiInjectionTest.java:691:113:691:129 | (...)... | provenance | Sink:MaD:48254 | | Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | Log4jJndiInjectionTest.java:692:98:692:114 | (...)... | provenance | Sink:MaD:2243 | -| Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | Log4jJndiInjectionTest.java:692:98:692:114 | (...)... | provenance | Sink:MaD:48248 | +| Log4jJndiInjectionTest.java:692:107:692:114 | source(...) : String | Log4jJndiInjectionTest.java:692:98:692:114 | (...)... | provenance | Sink:MaD:48254 | | Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | Log4jJndiInjectionTest.java:693:83:693:99 | (...)... | provenance | Sink:MaD:2243 | -| Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | Log4jJndiInjectionTest.java:693:83:693:99 | (...)... | provenance | Sink:MaD:48248 | +| Log4jJndiInjectionTest.java:693:92:693:99 | source(...) : String | Log4jJndiInjectionTest.java:693:83:693:99 | (...)... | provenance | Sink:MaD:48254 | | Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | Log4jJndiInjectionTest.java:694:68:694:84 | (...)... | provenance | Sink:MaD:2243 | -| Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | Log4jJndiInjectionTest.java:694:68:694:84 | (...)... | provenance | Sink:MaD:48248 | +| Log4jJndiInjectionTest.java:694:77:694:84 | source(...) : String | Log4jJndiInjectionTest.java:694:68:694:84 | (...)... | provenance | Sink:MaD:48254 | | Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | Log4jJndiInjectionTest.java:695:53:695:69 | (...)... | provenance | Sink:MaD:2243 | -| Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | Log4jJndiInjectionTest.java:695:53:695:69 | (...)... | provenance | Sink:MaD:48248 | +| Log4jJndiInjectionTest.java:695:62:695:69 | source(...) : String | Log4jJndiInjectionTest.java:695:53:695:69 | (...)... | provenance | Sink:MaD:48254 | | Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | Log4jJndiInjectionTest.java:696:38:696:54 | (...)... | provenance | Sink:MaD:2243 | -| Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | Log4jJndiInjectionTest.java:696:38:696:54 | (...)... | provenance | Sink:MaD:48248 | +| Log4jJndiInjectionTest.java:696:47:696:54 | source(...) : String | Log4jJndiInjectionTest.java:696:38:696:54 | (...)... | provenance | Sink:MaD:48254 | | Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | Log4jJndiInjectionTest.java:697:158:697:174 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | Log4jJndiInjectionTest.java:697:158:697:174 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:697:167:697:174 | source(...) : String | Log4jJndiInjectionTest.java:697:158:697:174 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | Log4jJndiInjectionTest.java:698:143:698:159 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | Log4jJndiInjectionTest.java:698:143:698:159 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:698:152:698:159 | source(...) : String | Log4jJndiInjectionTest.java:698:143:698:159 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | Log4jJndiInjectionTest.java:699:128:699:144 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | Log4jJndiInjectionTest.java:699:128:699:144 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:699:137:699:144 | source(...) : String | Log4jJndiInjectionTest.java:699:128:699:144 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | Log4jJndiInjectionTest.java:700:113:700:129 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | Log4jJndiInjectionTest.java:700:113:700:129 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:700:122:700:129 | source(...) : String | Log4jJndiInjectionTest.java:700:113:700:129 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | Log4jJndiInjectionTest.java:701:98:701:114 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | Log4jJndiInjectionTest.java:701:98:701:114 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:701:107:701:114 | source(...) : String | Log4jJndiInjectionTest.java:701:98:701:114 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | Log4jJndiInjectionTest.java:702:83:702:99 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | Log4jJndiInjectionTest.java:702:83:702:99 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:702:92:702:99 | source(...) : String | Log4jJndiInjectionTest.java:702:83:702:99 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | Log4jJndiInjectionTest.java:703:68:703:84 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | Log4jJndiInjectionTest.java:703:68:703:84 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:703:77:703:84 | source(...) : String | Log4jJndiInjectionTest.java:703:68:703:84 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | Log4jJndiInjectionTest.java:704:53:704:69 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | Log4jJndiInjectionTest.java:704:53:704:69 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:704:62:704:69 | source(...) : String | Log4jJndiInjectionTest.java:704:53:704:69 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | Log4jJndiInjectionTest.java:705:38:705:54 | (...)... | provenance | Sink:MaD:2244 | -| Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | Log4jJndiInjectionTest.java:705:38:705:54 | (...)... | provenance | Sink:MaD:48249 | +| Log4jJndiInjectionTest.java:705:47:705:54 | source(...) : String | Log4jJndiInjectionTest.java:705:38:705:54 | (...)... | provenance | Sink:MaD:48255 | | Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | Log4jJndiInjectionTest.java:706:173:706:189 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | Log4jJndiInjectionTest.java:706:173:706:189 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:706:182:706:189 | source(...) : String | Log4jJndiInjectionTest.java:706:173:706:189 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | Log4jJndiInjectionTest.java:707:158:707:174 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | Log4jJndiInjectionTest.java:707:158:707:174 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:707:167:707:174 | source(...) : String | Log4jJndiInjectionTest.java:707:158:707:174 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | Log4jJndiInjectionTest.java:708:143:708:159 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | Log4jJndiInjectionTest.java:708:143:708:159 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:708:152:708:159 | source(...) : String | Log4jJndiInjectionTest.java:708:143:708:159 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | Log4jJndiInjectionTest.java:709:128:709:144 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | Log4jJndiInjectionTest.java:709:128:709:144 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:709:137:709:144 | source(...) : String | Log4jJndiInjectionTest.java:709:128:709:144 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | Log4jJndiInjectionTest.java:710:113:710:129 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | Log4jJndiInjectionTest.java:710:113:710:129 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:710:122:710:129 | source(...) : String | Log4jJndiInjectionTest.java:710:113:710:129 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | Log4jJndiInjectionTest.java:711:98:711:114 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | Log4jJndiInjectionTest.java:711:98:711:114 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:711:107:711:114 | source(...) : String | Log4jJndiInjectionTest.java:711:98:711:114 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | Log4jJndiInjectionTest.java:712:83:712:99 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | Log4jJndiInjectionTest.java:712:83:712:99 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:712:92:712:99 | source(...) : String | Log4jJndiInjectionTest.java:712:83:712:99 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | Log4jJndiInjectionTest.java:713:68:713:84 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | Log4jJndiInjectionTest.java:713:68:713:84 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:713:77:713:84 | source(...) : String | Log4jJndiInjectionTest.java:713:68:713:84 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | Log4jJndiInjectionTest.java:714:53:714:69 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | Log4jJndiInjectionTest.java:714:53:714:69 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:714:62:714:69 | source(...) : String | Log4jJndiInjectionTest.java:714:53:714:69 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | Log4jJndiInjectionTest.java:715:38:715:54 | (...)... | provenance | Sink:MaD:2245 | -| Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | Log4jJndiInjectionTest.java:715:38:715:54 | (...)... | provenance | Sink:MaD:48250 | +| Log4jJndiInjectionTest.java:715:47:715:54 | source(...) : String | Log4jJndiInjectionTest.java:715:38:715:54 | (...)... | provenance | Sink:MaD:48256 | | Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | Log4jJndiInjectionTest.java:716:38:716:54 | (...)... | provenance | Sink:MaD:2237 | -| Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | Log4jJndiInjectionTest.java:716:38:716:54 | (...)... | provenance | Sink:MaD:48242 | +| Log4jJndiInjectionTest.java:716:47:716:54 | source(...) : String | Log4jJndiInjectionTest.java:716:38:716:54 | (...)... | provenance | Sink:MaD:48248 | | Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | Log4jJndiInjectionTest.java:717:53:717:74 | (...)... | provenance | Sink:MaD:2237 | -| Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | Log4jJndiInjectionTest.java:717:53:717:74 | (...)... | provenance | Sink:MaD:48242 | +| Log4jJndiInjectionTest.java:717:67:717:74 | source(...) : String | Log4jJndiInjectionTest.java:717:53:717:74 | (...)... | provenance | Sink:MaD:48248 | | Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | Log4jJndiInjectionTest.java:718:38:718:54 | (...)... | provenance | Sink:MaD:2249 | -| Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | Log4jJndiInjectionTest.java:718:38:718:54 | (...)... | provenance | Sink:MaD:48254 | +| Log4jJndiInjectionTest.java:718:47:718:54 | source(...) : String | Log4jJndiInjectionTest.java:718:38:718:54 | (...)... | provenance | Sink:MaD:48260 | | Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | Log4jJndiInjectionTest.java:719:38:719:59 | (...)... | provenance | Sink:MaD:2250 | -| Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | Log4jJndiInjectionTest.java:719:38:719:59 | (...)... | provenance | Sink:MaD:48255 | +| Log4jJndiInjectionTest.java:719:52:719:59 | source(...) : String | Log4jJndiInjectionTest.java:719:38:719:59 | (...)... | provenance | Sink:MaD:48261 | | Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | Log4jJndiInjectionTest.java:720:38:720:59 | (...)... | provenance | Sink:MaD:2251 | -| Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | Log4jJndiInjectionTest.java:720:38:720:59 | (...)... | provenance | Sink:MaD:48256 | +| Log4jJndiInjectionTest.java:720:52:720:59 | source(...) : String | Log4jJndiInjectionTest.java:720:38:720:59 | (...)... | provenance | Sink:MaD:48262 | | Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | Log4jJndiInjectionTest.java:721:26:721:48 | (...)... | provenance | Sink:MaD:2255 | -| Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | Log4jJndiInjectionTest.java:721:26:721:48 | (...)... | provenance | Sink:MaD:48260 | +| Log4jJndiInjectionTest.java:721:41:721:48 | source(...) : String | Log4jJndiInjectionTest.java:721:26:721:48 | (...)... | provenance | Sink:MaD:48266 | | Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | Log4jJndiInjectionTest.java:722:26:722:48 | (...)... | provenance | Sink:MaD:2256 | -| Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | Log4jJndiInjectionTest.java:722:26:722:48 | (...)... | provenance | Sink:MaD:48261 | +| Log4jJndiInjectionTest.java:722:41:722:48 | source(...) : String | Log4jJndiInjectionTest.java:722:26:722:48 | (...)... | provenance | Sink:MaD:48267 | | Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | Log4jJndiInjectionTest.java:723:41:723:63 | (...)... | provenance | Sink:MaD:2257 | -| Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | Log4jJndiInjectionTest.java:723:41:723:63 | (...)... | provenance | Sink:MaD:48262 | +| Log4jJndiInjectionTest.java:723:56:723:63 | source(...) : String | Log4jJndiInjectionTest.java:723:41:723:63 | (...)... | provenance | Sink:MaD:48268 | | Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | Log4jJndiInjectionTest.java:724:41:724:63 | (...)... | provenance | Sink:MaD:2258 | -| Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | Log4jJndiInjectionTest.java:724:41:724:63 | (...)... | provenance | Sink:MaD:48263 | +| Log4jJndiInjectionTest.java:724:56:724:63 | source(...) : String | Log4jJndiInjectionTest.java:724:41:724:63 | (...)... | provenance | Sink:MaD:48269 | | Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | Log4jJndiInjectionTest.java:725:41:725:58 | (...)... | provenance | Sink:MaD:2259 | -| Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | Log4jJndiInjectionTest.java:725:41:725:58 | (...)... | provenance | Sink:MaD:48264 | +| Log4jJndiInjectionTest.java:725:51:725:58 | source(...) : String | Log4jJndiInjectionTest.java:725:41:725:58 | (...)... | provenance | Sink:MaD:48270 | | Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | Log4jJndiInjectionTest.java:726:41:726:66 | (...)... | provenance | Sink:MaD:2260 | -| Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | Log4jJndiInjectionTest.java:726:41:726:66 | (...)... | provenance | Sink:MaD:48265 | +| Log4jJndiInjectionTest.java:726:59:726:66 | source(...) : String | Log4jJndiInjectionTest.java:726:41:726:66 | (...)... | provenance | Sink:MaD:48271 | | Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | Log4jJndiInjectionTest.java:727:41:727:66 | (...)... | provenance | Sink:MaD:2261 | -| Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | Log4jJndiInjectionTest.java:727:41:727:66 | (...)... | provenance | Sink:MaD:48266 | +| Log4jJndiInjectionTest.java:727:59:727:66 | source(...) : String | Log4jJndiInjectionTest.java:727:41:727:66 | (...)... | provenance | Sink:MaD:48272 | | Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | Log4jJndiInjectionTest.java:729:41:729:57 | (...)... | provenance | Sink:MaD:2264 | -| Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | Log4jJndiInjectionTest.java:729:41:729:57 | (...)... | provenance | Sink:MaD:48269 | +| Log4jJndiInjectionTest.java:729:50:729:57 | source(...) : String | Log4jJndiInjectionTest.java:729:41:729:57 | (...)... | provenance | Sink:MaD:48275 | | Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | Log4jJndiInjectionTest.java:730:41:730:57 | (...)... | provenance | Sink:MaD:2275 | -| Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | Log4jJndiInjectionTest.java:730:41:730:57 | (...)... | provenance | Sink:MaD:48280 | +| Log4jJndiInjectionTest.java:730:50:730:57 | source(...) : String | Log4jJndiInjectionTest.java:730:41:730:57 | (...)... | provenance | Sink:MaD:48286 | | Log4jJndiInjectionTest.java:731:56:731:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:731:56:731:78 | new Object[] | provenance | Sink:MaD:2275 | -| Log4jJndiInjectionTest.java:731:56:731:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:731:56:731:78 | new Object[] | provenance | Sink:MaD:48280 | +| Log4jJndiInjectionTest.java:731:56:731:78 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:731:56:731:78 | new Object[] | provenance | Sink:MaD:48286 | | Log4jJndiInjectionTest.java:731:70:731:77 | source(...) : String | Log4jJndiInjectionTest.java:731:56:731:78 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | Log4jJndiInjectionTest.java:732:56:732:72 | (...)... | provenance | Sink:MaD:2265 | -| Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | Log4jJndiInjectionTest.java:732:56:732:72 | (...)... | provenance | Sink:MaD:48270 | +| Log4jJndiInjectionTest.java:732:65:732:72 | source(...) : String | Log4jJndiInjectionTest.java:732:56:732:72 | (...)... | provenance | Sink:MaD:48276 | | Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | Log4jJndiInjectionTest.java:733:41:733:57 | (...)... | provenance | Sink:MaD:2265 | -| Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | Log4jJndiInjectionTest.java:733:41:733:57 | (...)... | provenance | Sink:MaD:48270 | +| Log4jJndiInjectionTest.java:733:50:733:57 | source(...) : String | Log4jJndiInjectionTest.java:733:41:733:57 | (...)... | provenance | Sink:MaD:48276 | | Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | Log4jJndiInjectionTest.java:734:71:734:87 | (...)... | provenance | Sink:MaD:2266 | -| Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | Log4jJndiInjectionTest.java:734:71:734:87 | (...)... | provenance | Sink:MaD:48271 | +| Log4jJndiInjectionTest.java:734:80:734:87 | source(...) : String | Log4jJndiInjectionTest.java:734:71:734:87 | (...)... | provenance | Sink:MaD:48277 | | Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | Log4jJndiInjectionTest.java:735:56:735:72 | (...)... | provenance | Sink:MaD:2266 | -| Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | Log4jJndiInjectionTest.java:735:56:735:72 | (...)... | provenance | Sink:MaD:48271 | +| Log4jJndiInjectionTest.java:735:65:735:72 | source(...) : String | Log4jJndiInjectionTest.java:735:56:735:72 | (...)... | provenance | Sink:MaD:48277 | | Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | Log4jJndiInjectionTest.java:736:41:736:57 | (...)... | provenance | Sink:MaD:2266 | -| Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | Log4jJndiInjectionTest.java:736:41:736:57 | (...)... | provenance | Sink:MaD:48271 | +| Log4jJndiInjectionTest.java:736:50:736:57 | source(...) : String | Log4jJndiInjectionTest.java:736:41:736:57 | (...)... | provenance | Sink:MaD:48277 | | Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | Log4jJndiInjectionTest.java:737:86:737:102 | (...)... | provenance | Sink:MaD:2267 | -| Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | Log4jJndiInjectionTest.java:737:86:737:102 | (...)... | provenance | Sink:MaD:48272 | +| Log4jJndiInjectionTest.java:737:95:737:102 | source(...) : String | Log4jJndiInjectionTest.java:737:86:737:102 | (...)... | provenance | Sink:MaD:48278 | | Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | Log4jJndiInjectionTest.java:738:71:738:87 | (...)... | provenance | Sink:MaD:2267 | -| Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | Log4jJndiInjectionTest.java:738:71:738:87 | (...)... | provenance | Sink:MaD:48272 | +| Log4jJndiInjectionTest.java:738:80:738:87 | source(...) : String | Log4jJndiInjectionTest.java:738:71:738:87 | (...)... | provenance | Sink:MaD:48278 | | Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | Log4jJndiInjectionTest.java:739:56:739:72 | (...)... | provenance | Sink:MaD:2267 | -| Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | Log4jJndiInjectionTest.java:739:56:739:72 | (...)... | provenance | Sink:MaD:48272 | +| Log4jJndiInjectionTest.java:739:65:739:72 | source(...) : String | Log4jJndiInjectionTest.java:739:56:739:72 | (...)... | provenance | Sink:MaD:48278 | | Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | Log4jJndiInjectionTest.java:740:41:740:57 | (...)... | provenance | Sink:MaD:2267 | -| Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | Log4jJndiInjectionTest.java:740:41:740:57 | (...)... | provenance | Sink:MaD:48272 | +| Log4jJndiInjectionTest.java:740:50:740:57 | source(...) : String | Log4jJndiInjectionTest.java:740:41:740:57 | (...)... | provenance | Sink:MaD:48278 | | Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | Log4jJndiInjectionTest.java:741:101:741:117 | (...)... | provenance | Sink:MaD:2268 | -| Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | Log4jJndiInjectionTest.java:741:101:741:117 | (...)... | provenance | Sink:MaD:48273 | +| Log4jJndiInjectionTest.java:741:110:741:117 | source(...) : String | Log4jJndiInjectionTest.java:741:101:741:117 | (...)... | provenance | Sink:MaD:48279 | | Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | Log4jJndiInjectionTest.java:742:86:742:102 | (...)... | provenance | Sink:MaD:2268 | -| Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | Log4jJndiInjectionTest.java:742:86:742:102 | (...)... | provenance | Sink:MaD:48273 | +| Log4jJndiInjectionTest.java:742:95:742:102 | source(...) : String | Log4jJndiInjectionTest.java:742:86:742:102 | (...)... | provenance | Sink:MaD:48279 | | Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | Log4jJndiInjectionTest.java:743:71:743:87 | (...)... | provenance | Sink:MaD:2268 | -| Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | Log4jJndiInjectionTest.java:743:71:743:87 | (...)... | provenance | Sink:MaD:48273 | +| Log4jJndiInjectionTest.java:743:80:743:87 | source(...) : String | Log4jJndiInjectionTest.java:743:71:743:87 | (...)... | provenance | Sink:MaD:48279 | | Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | Log4jJndiInjectionTest.java:744:56:744:72 | (...)... | provenance | Sink:MaD:2268 | -| Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | Log4jJndiInjectionTest.java:744:56:744:72 | (...)... | provenance | Sink:MaD:48273 | +| Log4jJndiInjectionTest.java:744:65:744:72 | source(...) : String | Log4jJndiInjectionTest.java:744:56:744:72 | (...)... | provenance | Sink:MaD:48279 | | Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | Log4jJndiInjectionTest.java:745:41:745:57 | (...)... | provenance | Sink:MaD:2268 | -| Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | Log4jJndiInjectionTest.java:745:41:745:57 | (...)... | provenance | Sink:MaD:48273 | +| Log4jJndiInjectionTest.java:745:50:745:57 | source(...) : String | Log4jJndiInjectionTest.java:745:41:745:57 | (...)... | provenance | Sink:MaD:48279 | | Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | Log4jJndiInjectionTest.java:746:116:746:132 | (...)... | provenance | Sink:MaD:2269 | -| Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | Log4jJndiInjectionTest.java:746:116:746:132 | (...)... | provenance | Sink:MaD:48274 | +| Log4jJndiInjectionTest.java:746:125:746:132 | source(...) : String | Log4jJndiInjectionTest.java:746:116:746:132 | (...)... | provenance | Sink:MaD:48280 | | Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | Log4jJndiInjectionTest.java:747:101:747:117 | (...)... | provenance | Sink:MaD:2269 | -| Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | Log4jJndiInjectionTest.java:747:101:747:117 | (...)... | provenance | Sink:MaD:48274 | +| Log4jJndiInjectionTest.java:747:110:747:117 | source(...) : String | Log4jJndiInjectionTest.java:747:101:747:117 | (...)... | provenance | Sink:MaD:48280 | | Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | Log4jJndiInjectionTest.java:748:86:748:102 | (...)... | provenance | Sink:MaD:2269 | -| Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | Log4jJndiInjectionTest.java:748:86:748:102 | (...)... | provenance | Sink:MaD:48274 | +| Log4jJndiInjectionTest.java:748:95:748:102 | source(...) : String | Log4jJndiInjectionTest.java:748:86:748:102 | (...)... | provenance | Sink:MaD:48280 | | Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | Log4jJndiInjectionTest.java:749:71:749:87 | (...)... | provenance | Sink:MaD:2269 | -| Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | Log4jJndiInjectionTest.java:749:71:749:87 | (...)... | provenance | Sink:MaD:48274 | +| Log4jJndiInjectionTest.java:749:80:749:87 | source(...) : String | Log4jJndiInjectionTest.java:749:71:749:87 | (...)... | provenance | Sink:MaD:48280 | | Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | Log4jJndiInjectionTest.java:750:56:750:72 | (...)... | provenance | Sink:MaD:2269 | -| Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | Log4jJndiInjectionTest.java:750:56:750:72 | (...)... | provenance | Sink:MaD:48274 | +| Log4jJndiInjectionTest.java:750:65:750:72 | source(...) : String | Log4jJndiInjectionTest.java:750:56:750:72 | (...)... | provenance | Sink:MaD:48280 | | Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | Log4jJndiInjectionTest.java:751:41:751:57 | (...)... | provenance | Sink:MaD:2269 | -| Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | Log4jJndiInjectionTest.java:751:41:751:57 | (...)... | provenance | Sink:MaD:48274 | +| Log4jJndiInjectionTest.java:751:50:751:57 | source(...) : String | Log4jJndiInjectionTest.java:751:41:751:57 | (...)... | provenance | Sink:MaD:48280 | | Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | Log4jJndiInjectionTest.java:752:131:752:147 | (...)... | provenance | Sink:MaD:2270 | -| Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | Log4jJndiInjectionTest.java:752:131:752:147 | (...)... | provenance | Sink:MaD:48275 | +| Log4jJndiInjectionTest.java:752:140:752:147 | source(...) : String | Log4jJndiInjectionTest.java:752:131:752:147 | (...)... | provenance | Sink:MaD:48281 | | Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | Log4jJndiInjectionTest.java:753:116:753:132 | (...)... | provenance | Sink:MaD:2270 | -| Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | Log4jJndiInjectionTest.java:753:116:753:132 | (...)... | provenance | Sink:MaD:48275 | +| Log4jJndiInjectionTest.java:753:125:753:132 | source(...) : String | Log4jJndiInjectionTest.java:753:116:753:132 | (...)... | provenance | Sink:MaD:48281 | | Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | Log4jJndiInjectionTest.java:754:101:754:117 | (...)... | provenance | Sink:MaD:2270 | -| Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | Log4jJndiInjectionTest.java:754:101:754:117 | (...)... | provenance | Sink:MaD:48275 | +| Log4jJndiInjectionTest.java:754:110:754:117 | source(...) : String | Log4jJndiInjectionTest.java:754:101:754:117 | (...)... | provenance | Sink:MaD:48281 | | Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | Log4jJndiInjectionTest.java:755:86:755:102 | (...)... | provenance | Sink:MaD:2270 | -| Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | Log4jJndiInjectionTest.java:755:86:755:102 | (...)... | provenance | Sink:MaD:48275 | +| Log4jJndiInjectionTest.java:755:95:755:102 | source(...) : String | Log4jJndiInjectionTest.java:755:86:755:102 | (...)... | provenance | Sink:MaD:48281 | | Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | Log4jJndiInjectionTest.java:756:71:756:87 | (...)... | provenance | Sink:MaD:2270 | -| Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | Log4jJndiInjectionTest.java:756:71:756:87 | (...)... | provenance | Sink:MaD:48275 | +| Log4jJndiInjectionTest.java:756:80:756:87 | source(...) : String | Log4jJndiInjectionTest.java:756:71:756:87 | (...)... | provenance | Sink:MaD:48281 | | Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | Log4jJndiInjectionTest.java:757:56:757:72 | (...)... | provenance | Sink:MaD:2270 | -| Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | Log4jJndiInjectionTest.java:757:56:757:72 | (...)... | provenance | Sink:MaD:48275 | +| Log4jJndiInjectionTest.java:757:65:757:72 | source(...) : String | Log4jJndiInjectionTest.java:757:56:757:72 | (...)... | provenance | Sink:MaD:48281 | | Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | Log4jJndiInjectionTest.java:758:41:758:57 | (...)... | provenance | Sink:MaD:2270 | -| Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | Log4jJndiInjectionTest.java:758:41:758:57 | (...)... | provenance | Sink:MaD:48275 | +| Log4jJndiInjectionTest.java:758:50:758:57 | source(...) : String | Log4jJndiInjectionTest.java:758:41:758:57 | (...)... | provenance | Sink:MaD:48281 | | Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | Log4jJndiInjectionTest.java:759:146:759:162 | (...)... | provenance | Sink:MaD:2271 | -| Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | Log4jJndiInjectionTest.java:759:146:759:162 | (...)... | provenance | Sink:MaD:48276 | +| Log4jJndiInjectionTest.java:759:155:759:162 | source(...) : String | Log4jJndiInjectionTest.java:759:146:759:162 | (...)... | provenance | Sink:MaD:48282 | | Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | Log4jJndiInjectionTest.java:760:131:760:147 | (...)... | provenance | Sink:MaD:2271 | -| Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | Log4jJndiInjectionTest.java:760:131:760:147 | (...)... | provenance | Sink:MaD:48276 | +| Log4jJndiInjectionTest.java:760:140:760:147 | source(...) : String | Log4jJndiInjectionTest.java:760:131:760:147 | (...)... | provenance | Sink:MaD:48282 | | Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | Log4jJndiInjectionTest.java:761:116:761:132 | (...)... | provenance | Sink:MaD:2271 | -| Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | Log4jJndiInjectionTest.java:761:116:761:132 | (...)... | provenance | Sink:MaD:48276 | +| Log4jJndiInjectionTest.java:761:125:761:132 | source(...) : String | Log4jJndiInjectionTest.java:761:116:761:132 | (...)... | provenance | Sink:MaD:48282 | | Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | Log4jJndiInjectionTest.java:762:101:762:117 | (...)... | provenance | Sink:MaD:2271 | -| Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | Log4jJndiInjectionTest.java:762:101:762:117 | (...)... | provenance | Sink:MaD:48276 | +| Log4jJndiInjectionTest.java:762:110:762:117 | source(...) : String | Log4jJndiInjectionTest.java:762:101:762:117 | (...)... | provenance | Sink:MaD:48282 | | Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | Log4jJndiInjectionTest.java:763:86:763:102 | (...)... | provenance | Sink:MaD:2271 | -| Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | Log4jJndiInjectionTest.java:763:86:763:102 | (...)... | provenance | Sink:MaD:48276 | +| Log4jJndiInjectionTest.java:763:95:763:102 | source(...) : String | Log4jJndiInjectionTest.java:763:86:763:102 | (...)... | provenance | Sink:MaD:48282 | | Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | Log4jJndiInjectionTest.java:764:71:764:87 | (...)... | provenance | Sink:MaD:2271 | -| Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | Log4jJndiInjectionTest.java:764:71:764:87 | (...)... | provenance | Sink:MaD:48276 | +| Log4jJndiInjectionTest.java:764:80:764:87 | source(...) : String | Log4jJndiInjectionTest.java:764:71:764:87 | (...)... | provenance | Sink:MaD:48282 | | Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | Log4jJndiInjectionTest.java:765:56:765:72 | (...)... | provenance | Sink:MaD:2271 | -| Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | Log4jJndiInjectionTest.java:765:56:765:72 | (...)... | provenance | Sink:MaD:48276 | +| Log4jJndiInjectionTest.java:765:65:765:72 | source(...) : String | Log4jJndiInjectionTest.java:765:56:765:72 | (...)... | provenance | Sink:MaD:48282 | | Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | Log4jJndiInjectionTest.java:766:41:766:57 | (...)... | provenance | Sink:MaD:2271 | -| Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | Log4jJndiInjectionTest.java:766:41:766:57 | (...)... | provenance | Sink:MaD:48276 | +| Log4jJndiInjectionTest.java:766:50:766:57 | source(...) : String | Log4jJndiInjectionTest.java:766:41:766:57 | (...)... | provenance | Sink:MaD:48282 | | Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | Log4jJndiInjectionTest.java:767:161:767:177 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | Log4jJndiInjectionTest.java:767:161:767:177 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:767:170:767:177 | source(...) : String | Log4jJndiInjectionTest.java:767:161:767:177 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | Log4jJndiInjectionTest.java:768:146:768:162 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | Log4jJndiInjectionTest.java:768:146:768:162 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:768:155:768:162 | source(...) : String | Log4jJndiInjectionTest.java:768:146:768:162 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | Log4jJndiInjectionTest.java:769:131:769:147 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | Log4jJndiInjectionTest.java:769:131:769:147 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:769:140:769:147 | source(...) : String | Log4jJndiInjectionTest.java:769:131:769:147 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | Log4jJndiInjectionTest.java:770:116:770:132 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | Log4jJndiInjectionTest.java:770:116:770:132 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:770:125:770:132 | source(...) : String | Log4jJndiInjectionTest.java:770:116:770:132 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | Log4jJndiInjectionTest.java:771:101:771:117 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | Log4jJndiInjectionTest.java:771:101:771:117 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:771:110:771:117 | source(...) : String | Log4jJndiInjectionTest.java:771:101:771:117 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | Log4jJndiInjectionTest.java:772:86:772:102 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | Log4jJndiInjectionTest.java:772:86:772:102 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:772:95:772:102 | source(...) : String | Log4jJndiInjectionTest.java:772:86:772:102 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | Log4jJndiInjectionTest.java:773:71:773:87 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | Log4jJndiInjectionTest.java:773:71:773:87 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:773:80:773:87 | source(...) : String | Log4jJndiInjectionTest.java:773:71:773:87 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | Log4jJndiInjectionTest.java:774:56:774:72 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | Log4jJndiInjectionTest.java:774:56:774:72 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:774:65:774:72 | source(...) : String | Log4jJndiInjectionTest.java:774:56:774:72 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | Log4jJndiInjectionTest.java:775:41:775:57 | (...)... | provenance | Sink:MaD:2272 | -| Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | Log4jJndiInjectionTest.java:775:41:775:57 | (...)... | provenance | Sink:MaD:48277 | +| Log4jJndiInjectionTest.java:775:50:775:57 | source(...) : String | Log4jJndiInjectionTest.java:775:41:775:57 | (...)... | provenance | Sink:MaD:48283 | | Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | Log4jJndiInjectionTest.java:776:176:776:192 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | Log4jJndiInjectionTest.java:776:176:776:192 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:776:185:776:192 | source(...) : String | Log4jJndiInjectionTest.java:776:176:776:192 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | Log4jJndiInjectionTest.java:777:161:777:177 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | Log4jJndiInjectionTest.java:777:161:777:177 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:777:170:777:177 | source(...) : String | Log4jJndiInjectionTest.java:777:161:777:177 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | Log4jJndiInjectionTest.java:778:146:778:162 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | Log4jJndiInjectionTest.java:778:146:778:162 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:778:155:778:162 | source(...) : String | Log4jJndiInjectionTest.java:778:146:778:162 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | Log4jJndiInjectionTest.java:779:131:779:147 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | Log4jJndiInjectionTest.java:779:131:779:147 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:779:140:779:147 | source(...) : String | Log4jJndiInjectionTest.java:779:131:779:147 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | Log4jJndiInjectionTest.java:780:116:780:132 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | Log4jJndiInjectionTest.java:780:116:780:132 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:780:125:780:132 | source(...) : String | Log4jJndiInjectionTest.java:780:116:780:132 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | Log4jJndiInjectionTest.java:781:101:781:117 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | Log4jJndiInjectionTest.java:781:101:781:117 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:781:110:781:117 | source(...) : String | Log4jJndiInjectionTest.java:781:101:781:117 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | Log4jJndiInjectionTest.java:782:86:782:102 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | Log4jJndiInjectionTest.java:782:86:782:102 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:782:95:782:102 | source(...) : String | Log4jJndiInjectionTest.java:782:86:782:102 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | Log4jJndiInjectionTest.java:783:71:783:87 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | Log4jJndiInjectionTest.java:783:71:783:87 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:783:80:783:87 | source(...) : String | Log4jJndiInjectionTest.java:783:71:783:87 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | Log4jJndiInjectionTest.java:784:56:784:72 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | Log4jJndiInjectionTest.java:784:56:784:72 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:784:65:784:72 | source(...) : String | Log4jJndiInjectionTest.java:784:56:784:72 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | Log4jJndiInjectionTest.java:785:41:785:57 | (...)... | provenance | Sink:MaD:2273 | -| Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | Log4jJndiInjectionTest.java:785:41:785:57 | (...)... | provenance | Sink:MaD:48278 | +| Log4jJndiInjectionTest.java:785:50:785:57 | source(...) : String | Log4jJndiInjectionTest.java:785:41:785:57 | (...)... | provenance | Sink:MaD:48284 | | Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | Log4jJndiInjectionTest.java:786:41:786:57 | (...)... | provenance | Sink:MaD:2265 | -| Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | Log4jJndiInjectionTest.java:786:41:786:57 | (...)... | provenance | Sink:MaD:48270 | +| Log4jJndiInjectionTest.java:786:50:786:57 | source(...) : String | Log4jJndiInjectionTest.java:786:41:786:57 | (...)... | provenance | Sink:MaD:48276 | | Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | Log4jJndiInjectionTest.java:787:56:787:77 | (...)... | provenance | Sink:MaD:2265 | -| Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | Log4jJndiInjectionTest.java:787:56:787:77 | (...)... | provenance | Sink:MaD:48270 | +| Log4jJndiInjectionTest.java:787:70:787:77 | source(...) : String | Log4jJndiInjectionTest.java:787:56:787:77 | (...)... | provenance | Sink:MaD:48276 | | Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | Log4jJndiInjectionTest.java:788:41:788:57 | (...)... | provenance | Sink:MaD:2277 | -| Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | Log4jJndiInjectionTest.java:788:41:788:57 | (...)... | provenance | Sink:MaD:48282 | +| Log4jJndiInjectionTest.java:788:50:788:57 | source(...) : String | Log4jJndiInjectionTest.java:788:41:788:57 | (...)... | provenance | Sink:MaD:48288 | | Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | Log4jJndiInjectionTest.java:789:41:789:62 | (...)... | provenance | Sink:MaD:2278 | -| Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | Log4jJndiInjectionTest.java:789:41:789:62 | (...)... | provenance | Sink:MaD:48283 | +| Log4jJndiInjectionTest.java:789:55:789:62 | source(...) : String | Log4jJndiInjectionTest.java:789:41:789:62 | (...)... | provenance | Sink:MaD:48289 | | Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | Log4jJndiInjectionTest.java:790:41:790:62 | (...)... | provenance | Sink:MaD:2279 | -| Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | Log4jJndiInjectionTest.java:790:41:790:62 | (...)... | provenance | Sink:MaD:48284 | +| Log4jJndiInjectionTest.java:790:55:790:62 | source(...) : String | Log4jJndiInjectionTest.java:790:41:790:62 | (...)... | provenance | Sink:MaD:48290 | | Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | Log4jJndiInjectionTest.java:791:26:791:51 | (...)... | provenance | Sink:MaD:2282 | -| Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | Log4jJndiInjectionTest.java:791:26:791:51 | (...)... | provenance | Sink:MaD:48287 | +| Log4jJndiInjectionTest.java:791:44:791:51 | source(...) : String | Log4jJndiInjectionTest.java:791:26:791:51 | (...)... | provenance | Sink:MaD:48293 | | Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | Log4jJndiInjectionTest.java:792:26:792:51 | (...)... | provenance | Sink:MaD:2283 | -| Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | Log4jJndiInjectionTest.java:792:26:792:51 | (...)... | provenance | Sink:MaD:48288 | +| Log4jJndiInjectionTest.java:792:44:792:51 | source(...) : String | Log4jJndiInjectionTest.java:792:26:792:51 | (...)... | provenance | Sink:MaD:48294 | | Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | Log4jJndiInjectionTest.java:793:26:793:43 | (...)... | provenance | Sink:MaD:2280 | -| Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | Log4jJndiInjectionTest.java:793:26:793:43 | (...)... | provenance | Sink:MaD:48285 | +| Log4jJndiInjectionTest.java:793:36:793:43 | source(...) : String | Log4jJndiInjectionTest.java:793:26:793:43 | (...)... | provenance | Sink:MaD:48291 | | Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | Log4jJndiInjectionTest.java:794:26:794:43 | (...)... | provenance | Sink:MaD:2281 | -| Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | Log4jJndiInjectionTest.java:794:26:794:43 | (...)... | provenance | Sink:MaD:48286 | +| Log4jJndiInjectionTest.java:794:36:794:43 | source(...) : String | Log4jJndiInjectionTest.java:794:26:794:43 | (...)... | provenance | Sink:MaD:48292 | | Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | Log4jJndiInjectionTest.java:797:26:797:42 | (...)... | provenance | Sink:MaD:2286 | -| Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | Log4jJndiInjectionTest.java:797:26:797:42 | (...)... | provenance | Sink:MaD:48291 | +| Log4jJndiInjectionTest.java:797:35:797:42 | source(...) : String | Log4jJndiInjectionTest.java:797:26:797:42 | (...)... | provenance | Sink:MaD:48297 | | Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | Log4jJndiInjectionTest.java:798:26:798:42 | (...)... | provenance | Sink:MaD:2297 | -| Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | Log4jJndiInjectionTest.java:798:26:798:42 | (...)... | provenance | Sink:MaD:48302 | +| Log4jJndiInjectionTest.java:798:35:798:42 | source(...) : String | Log4jJndiInjectionTest.java:798:26:798:42 | (...)... | provenance | Sink:MaD:48308 | | Log4jJndiInjectionTest.java:799:41:799:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:799:41:799:63 | new Object[] | provenance | Sink:MaD:2297 | -| Log4jJndiInjectionTest.java:799:41:799:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:799:41:799:63 | new Object[] | provenance | Sink:MaD:48302 | +| Log4jJndiInjectionTest.java:799:41:799:63 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:799:41:799:63 | new Object[] | provenance | Sink:MaD:48308 | | Log4jJndiInjectionTest.java:799:55:799:62 | source(...) : String | Log4jJndiInjectionTest.java:799:41:799:63 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | Log4jJndiInjectionTest.java:800:41:800:57 | (...)... | provenance | Sink:MaD:2287 | -| Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | Log4jJndiInjectionTest.java:800:41:800:57 | (...)... | provenance | Sink:MaD:48292 | +| Log4jJndiInjectionTest.java:800:50:800:57 | source(...) : String | Log4jJndiInjectionTest.java:800:41:800:57 | (...)... | provenance | Sink:MaD:48298 | | Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | Log4jJndiInjectionTest.java:801:26:801:42 | (...)... | provenance | Sink:MaD:2287 | -| Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | Log4jJndiInjectionTest.java:801:26:801:42 | (...)... | provenance | Sink:MaD:48292 | +| Log4jJndiInjectionTest.java:801:35:801:42 | source(...) : String | Log4jJndiInjectionTest.java:801:26:801:42 | (...)... | provenance | Sink:MaD:48298 | | Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | Log4jJndiInjectionTest.java:802:56:802:72 | (...)... | provenance | Sink:MaD:2288 | -| Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | Log4jJndiInjectionTest.java:802:56:802:72 | (...)... | provenance | Sink:MaD:48293 | +| Log4jJndiInjectionTest.java:802:65:802:72 | source(...) : String | Log4jJndiInjectionTest.java:802:56:802:72 | (...)... | provenance | Sink:MaD:48299 | | Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | Log4jJndiInjectionTest.java:803:41:803:57 | (...)... | provenance | Sink:MaD:2288 | -| Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | Log4jJndiInjectionTest.java:803:41:803:57 | (...)... | provenance | Sink:MaD:48293 | +| Log4jJndiInjectionTest.java:803:50:803:57 | source(...) : String | Log4jJndiInjectionTest.java:803:41:803:57 | (...)... | provenance | Sink:MaD:48299 | | Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | Log4jJndiInjectionTest.java:804:26:804:42 | (...)... | provenance | Sink:MaD:2288 | -| Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | Log4jJndiInjectionTest.java:804:26:804:42 | (...)... | provenance | Sink:MaD:48293 | +| Log4jJndiInjectionTest.java:804:35:804:42 | source(...) : String | Log4jJndiInjectionTest.java:804:26:804:42 | (...)... | provenance | Sink:MaD:48299 | | Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | Log4jJndiInjectionTest.java:805:71:805:87 | (...)... | provenance | Sink:MaD:2289 | -| Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | Log4jJndiInjectionTest.java:805:71:805:87 | (...)... | provenance | Sink:MaD:48294 | +| Log4jJndiInjectionTest.java:805:80:805:87 | source(...) : String | Log4jJndiInjectionTest.java:805:71:805:87 | (...)... | provenance | Sink:MaD:48300 | | Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | Log4jJndiInjectionTest.java:806:56:806:72 | (...)... | provenance | Sink:MaD:2289 | -| Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | Log4jJndiInjectionTest.java:806:56:806:72 | (...)... | provenance | Sink:MaD:48294 | +| Log4jJndiInjectionTest.java:806:65:806:72 | source(...) : String | Log4jJndiInjectionTest.java:806:56:806:72 | (...)... | provenance | Sink:MaD:48300 | | Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | Log4jJndiInjectionTest.java:807:41:807:57 | (...)... | provenance | Sink:MaD:2289 | -| Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | Log4jJndiInjectionTest.java:807:41:807:57 | (...)... | provenance | Sink:MaD:48294 | +| Log4jJndiInjectionTest.java:807:50:807:57 | source(...) : String | Log4jJndiInjectionTest.java:807:41:807:57 | (...)... | provenance | Sink:MaD:48300 | | Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | Log4jJndiInjectionTest.java:808:26:808:42 | (...)... | provenance | Sink:MaD:2289 | -| Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | Log4jJndiInjectionTest.java:808:26:808:42 | (...)... | provenance | Sink:MaD:48294 | +| Log4jJndiInjectionTest.java:808:35:808:42 | source(...) : String | Log4jJndiInjectionTest.java:808:26:808:42 | (...)... | provenance | Sink:MaD:48300 | | Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | Log4jJndiInjectionTest.java:809:86:809:102 | (...)... | provenance | Sink:MaD:2290 | -| Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | Log4jJndiInjectionTest.java:809:86:809:102 | (...)... | provenance | Sink:MaD:48295 | +| Log4jJndiInjectionTest.java:809:95:809:102 | source(...) : String | Log4jJndiInjectionTest.java:809:86:809:102 | (...)... | provenance | Sink:MaD:48301 | | Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | Log4jJndiInjectionTest.java:810:71:810:87 | (...)... | provenance | Sink:MaD:2290 | -| Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | Log4jJndiInjectionTest.java:810:71:810:87 | (...)... | provenance | Sink:MaD:48295 | +| Log4jJndiInjectionTest.java:810:80:810:87 | source(...) : String | Log4jJndiInjectionTest.java:810:71:810:87 | (...)... | provenance | Sink:MaD:48301 | | Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | Log4jJndiInjectionTest.java:811:56:811:72 | (...)... | provenance | Sink:MaD:2290 | -| Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | Log4jJndiInjectionTest.java:811:56:811:72 | (...)... | provenance | Sink:MaD:48295 | +| Log4jJndiInjectionTest.java:811:65:811:72 | source(...) : String | Log4jJndiInjectionTest.java:811:56:811:72 | (...)... | provenance | Sink:MaD:48301 | | Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | Log4jJndiInjectionTest.java:812:41:812:57 | (...)... | provenance | Sink:MaD:2290 | -| Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | Log4jJndiInjectionTest.java:812:41:812:57 | (...)... | provenance | Sink:MaD:48295 | +| Log4jJndiInjectionTest.java:812:50:812:57 | source(...) : String | Log4jJndiInjectionTest.java:812:41:812:57 | (...)... | provenance | Sink:MaD:48301 | | Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | Log4jJndiInjectionTest.java:813:26:813:42 | (...)... | provenance | Sink:MaD:2290 | -| Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | Log4jJndiInjectionTest.java:813:26:813:42 | (...)... | provenance | Sink:MaD:48295 | +| Log4jJndiInjectionTest.java:813:35:813:42 | source(...) : String | Log4jJndiInjectionTest.java:813:26:813:42 | (...)... | provenance | Sink:MaD:48301 | | Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | Log4jJndiInjectionTest.java:814:101:814:117 | (...)... | provenance | Sink:MaD:2291 | -| Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | Log4jJndiInjectionTest.java:814:101:814:117 | (...)... | provenance | Sink:MaD:48296 | +| Log4jJndiInjectionTest.java:814:110:814:117 | source(...) : String | Log4jJndiInjectionTest.java:814:101:814:117 | (...)... | provenance | Sink:MaD:48302 | | Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | Log4jJndiInjectionTest.java:815:86:815:102 | (...)... | provenance | Sink:MaD:2291 | -| Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | Log4jJndiInjectionTest.java:815:86:815:102 | (...)... | provenance | Sink:MaD:48296 | +| Log4jJndiInjectionTest.java:815:95:815:102 | source(...) : String | Log4jJndiInjectionTest.java:815:86:815:102 | (...)... | provenance | Sink:MaD:48302 | | Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | Log4jJndiInjectionTest.java:816:71:816:87 | (...)... | provenance | Sink:MaD:2291 | -| Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | Log4jJndiInjectionTest.java:816:71:816:87 | (...)... | provenance | Sink:MaD:48296 | +| Log4jJndiInjectionTest.java:816:80:816:87 | source(...) : String | Log4jJndiInjectionTest.java:816:71:816:87 | (...)... | provenance | Sink:MaD:48302 | | Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | Log4jJndiInjectionTest.java:817:56:817:72 | (...)... | provenance | Sink:MaD:2291 | -| Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | Log4jJndiInjectionTest.java:817:56:817:72 | (...)... | provenance | Sink:MaD:48296 | +| Log4jJndiInjectionTest.java:817:65:817:72 | source(...) : String | Log4jJndiInjectionTest.java:817:56:817:72 | (...)... | provenance | Sink:MaD:48302 | | Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | Log4jJndiInjectionTest.java:818:41:818:57 | (...)... | provenance | Sink:MaD:2291 | -| Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | Log4jJndiInjectionTest.java:818:41:818:57 | (...)... | provenance | Sink:MaD:48296 | +| Log4jJndiInjectionTest.java:818:50:818:57 | source(...) : String | Log4jJndiInjectionTest.java:818:41:818:57 | (...)... | provenance | Sink:MaD:48302 | | Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | Log4jJndiInjectionTest.java:819:26:819:42 | (...)... | provenance | Sink:MaD:2291 | -| Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | Log4jJndiInjectionTest.java:819:26:819:42 | (...)... | provenance | Sink:MaD:48296 | +| Log4jJndiInjectionTest.java:819:35:819:42 | source(...) : String | Log4jJndiInjectionTest.java:819:26:819:42 | (...)... | provenance | Sink:MaD:48302 | | Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | Log4jJndiInjectionTest.java:820:116:820:132 | (...)... | provenance | Sink:MaD:2292 | -| Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | Log4jJndiInjectionTest.java:820:116:820:132 | (...)... | provenance | Sink:MaD:48297 | +| Log4jJndiInjectionTest.java:820:125:820:132 | source(...) : String | Log4jJndiInjectionTest.java:820:116:820:132 | (...)... | provenance | Sink:MaD:48303 | | Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | Log4jJndiInjectionTest.java:821:101:821:117 | (...)... | provenance | Sink:MaD:2292 | -| Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | Log4jJndiInjectionTest.java:821:101:821:117 | (...)... | provenance | Sink:MaD:48297 | +| Log4jJndiInjectionTest.java:821:110:821:117 | source(...) : String | Log4jJndiInjectionTest.java:821:101:821:117 | (...)... | provenance | Sink:MaD:48303 | | Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | Log4jJndiInjectionTest.java:822:86:822:102 | (...)... | provenance | Sink:MaD:2292 | -| Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | Log4jJndiInjectionTest.java:822:86:822:102 | (...)... | provenance | Sink:MaD:48297 | +| Log4jJndiInjectionTest.java:822:95:822:102 | source(...) : String | Log4jJndiInjectionTest.java:822:86:822:102 | (...)... | provenance | Sink:MaD:48303 | | Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | Log4jJndiInjectionTest.java:823:71:823:87 | (...)... | provenance | Sink:MaD:2292 | -| Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | Log4jJndiInjectionTest.java:823:71:823:87 | (...)... | provenance | Sink:MaD:48297 | +| Log4jJndiInjectionTest.java:823:80:823:87 | source(...) : String | Log4jJndiInjectionTest.java:823:71:823:87 | (...)... | provenance | Sink:MaD:48303 | | Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | Log4jJndiInjectionTest.java:824:56:824:72 | (...)... | provenance | Sink:MaD:2292 | -| Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | Log4jJndiInjectionTest.java:824:56:824:72 | (...)... | provenance | Sink:MaD:48297 | +| Log4jJndiInjectionTest.java:824:65:824:72 | source(...) : String | Log4jJndiInjectionTest.java:824:56:824:72 | (...)... | provenance | Sink:MaD:48303 | | Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | Log4jJndiInjectionTest.java:825:41:825:57 | (...)... | provenance | Sink:MaD:2292 | -| Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | Log4jJndiInjectionTest.java:825:41:825:57 | (...)... | provenance | Sink:MaD:48297 | +| Log4jJndiInjectionTest.java:825:50:825:57 | source(...) : String | Log4jJndiInjectionTest.java:825:41:825:57 | (...)... | provenance | Sink:MaD:48303 | | Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | Log4jJndiInjectionTest.java:826:26:826:42 | (...)... | provenance | Sink:MaD:2292 | -| Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | Log4jJndiInjectionTest.java:826:26:826:42 | (...)... | provenance | Sink:MaD:48297 | +| Log4jJndiInjectionTest.java:826:35:826:42 | source(...) : String | Log4jJndiInjectionTest.java:826:26:826:42 | (...)... | provenance | Sink:MaD:48303 | | Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | Log4jJndiInjectionTest.java:827:131:827:147 | (...)... | provenance | Sink:MaD:2293 | -| Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | Log4jJndiInjectionTest.java:827:131:827:147 | (...)... | provenance | Sink:MaD:48298 | +| Log4jJndiInjectionTest.java:827:140:827:147 | source(...) : String | Log4jJndiInjectionTest.java:827:131:827:147 | (...)... | provenance | Sink:MaD:48304 | | Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | Log4jJndiInjectionTest.java:828:116:828:132 | (...)... | provenance | Sink:MaD:2293 | -| Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | Log4jJndiInjectionTest.java:828:116:828:132 | (...)... | provenance | Sink:MaD:48298 | +| Log4jJndiInjectionTest.java:828:125:828:132 | source(...) : String | Log4jJndiInjectionTest.java:828:116:828:132 | (...)... | provenance | Sink:MaD:48304 | | Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | Log4jJndiInjectionTest.java:829:101:829:117 | (...)... | provenance | Sink:MaD:2293 | -| Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | Log4jJndiInjectionTest.java:829:101:829:117 | (...)... | provenance | Sink:MaD:48298 | +| Log4jJndiInjectionTest.java:829:110:829:117 | source(...) : String | Log4jJndiInjectionTest.java:829:101:829:117 | (...)... | provenance | Sink:MaD:48304 | | Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | Log4jJndiInjectionTest.java:830:86:830:102 | (...)... | provenance | Sink:MaD:2293 | -| Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | Log4jJndiInjectionTest.java:830:86:830:102 | (...)... | provenance | Sink:MaD:48298 | +| Log4jJndiInjectionTest.java:830:95:830:102 | source(...) : String | Log4jJndiInjectionTest.java:830:86:830:102 | (...)... | provenance | Sink:MaD:48304 | | Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | Log4jJndiInjectionTest.java:831:71:831:87 | (...)... | provenance | Sink:MaD:2293 | -| Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | Log4jJndiInjectionTest.java:831:71:831:87 | (...)... | provenance | Sink:MaD:48298 | +| Log4jJndiInjectionTest.java:831:80:831:87 | source(...) : String | Log4jJndiInjectionTest.java:831:71:831:87 | (...)... | provenance | Sink:MaD:48304 | | Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | Log4jJndiInjectionTest.java:832:56:832:72 | (...)... | provenance | Sink:MaD:2293 | -| Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | Log4jJndiInjectionTest.java:832:56:832:72 | (...)... | provenance | Sink:MaD:48298 | +| Log4jJndiInjectionTest.java:832:65:832:72 | source(...) : String | Log4jJndiInjectionTest.java:832:56:832:72 | (...)... | provenance | Sink:MaD:48304 | | Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | Log4jJndiInjectionTest.java:833:41:833:57 | (...)... | provenance | Sink:MaD:2293 | -| Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | Log4jJndiInjectionTest.java:833:41:833:57 | (...)... | provenance | Sink:MaD:48298 | +| Log4jJndiInjectionTest.java:833:50:833:57 | source(...) : String | Log4jJndiInjectionTest.java:833:41:833:57 | (...)... | provenance | Sink:MaD:48304 | | Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | Log4jJndiInjectionTest.java:834:26:834:42 | (...)... | provenance | Sink:MaD:2293 | -| Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | Log4jJndiInjectionTest.java:834:26:834:42 | (...)... | provenance | Sink:MaD:48298 | +| Log4jJndiInjectionTest.java:834:35:834:42 | source(...) : String | Log4jJndiInjectionTest.java:834:26:834:42 | (...)... | provenance | Sink:MaD:48304 | | Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | Log4jJndiInjectionTest.java:835:146:835:162 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | Log4jJndiInjectionTest.java:835:146:835:162 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:835:155:835:162 | source(...) : String | Log4jJndiInjectionTest.java:835:146:835:162 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | Log4jJndiInjectionTest.java:836:131:836:147 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | Log4jJndiInjectionTest.java:836:131:836:147 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:836:140:836:147 | source(...) : String | Log4jJndiInjectionTest.java:836:131:836:147 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | Log4jJndiInjectionTest.java:837:116:837:132 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | Log4jJndiInjectionTest.java:837:116:837:132 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:837:125:837:132 | source(...) : String | Log4jJndiInjectionTest.java:837:116:837:132 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | Log4jJndiInjectionTest.java:838:101:838:117 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | Log4jJndiInjectionTest.java:838:101:838:117 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:838:110:838:117 | source(...) : String | Log4jJndiInjectionTest.java:838:101:838:117 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | Log4jJndiInjectionTest.java:839:86:839:102 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | Log4jJndiInjectionTest.java:839:86:839:102 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:839:95:839:102 | source(...) : String | Log4jJndiInjectionTest.java:839:86:839:102 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | Log4jJndiInjectionTest.java:840:71:840:87 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | Log4jJndiInjectionTest.java:840:71:840:87 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:840:80:840:87 | source(...) : String | Log4jJndiInjectionTest.java:840:71:840:87 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | Log4jJndiInjectionTest.java:841:56:841:72 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | Log4jJndiInjectionTest.java:841:56:841:72 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:841:65:841:72 | source(...) : String | Log4jJndiInjectionTest.java:841:56:841:72 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | Log4jJndiInjectionTest.java:842:41:842:57 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | Log4jJndiInjectionTest.java:842:41:842:57 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:842:50:842:57 | source(...) : String | Log4jJndiInjectionTest.java:842:41:842:57 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | Log4jJndiInjectionTest.java:843:26:843:42 | (...)... | provenance | Sink:MaD:2294 | -| Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | Log4jJndiInjectionTest.java:843:26:843:42 | (...)... | provenance | Sink:MaD:48299 | +| Log4jJndiInjectionTest.java:843:35:843:42 | source(...) : String | Log4jJndiInjectionTest.java:843:26:843:42 | (...)... | provenance | Sink:MaD:48305 | | Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | Log4jJndiInjectionTest.java:844:161:844:177 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | Log4jJndiInjectionTest.java:844:161:844:177 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:844:170:844:177 | source(...) : String | Log4jJndiInjectionTest.java:844:161:844:177 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | Log4jJndiInjectionTest.java:845:146:845:162 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | Log4jJndiInjectionTest.java:845:146:845:162 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:845:155:845:162 | source(...) : String | Log4jJndiInjectionTest.java:845:146:845:162 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | Log4jJndiInjectionTest.java:846:131:846:147 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | Log4jJndiInjectionTest.java:846:131:846:147 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:846:140:846:147 | source(...) : String | Log4jJndiInjectionTest.java:846:131:846:147 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | Log4jJndiInjectionTest.java:847:116:847:132 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | Log4jJndiInjectionTest.java:847:116:847:132 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:847:125:847:132 | source(...) : String | Log4jJndiInjectionTest.java:847:116:847:132 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | Log4jJndiInjectionTest.java:848:101:848:117 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | Log4jJndiInjectionTest.java:848:101:848:117 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:848:110:848:117 | source(...) : String | Log4jJndiInjectionTest.java:848:101:848:117 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | Log4jJndiInjectionTest.java:849:86:849:102 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | Log4jJndiInjectionTest.java:849:86:849:102 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:849:95:849:102 | source(...) : String | Log4jJndiInjectionTest.java:849:86:849:102 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | Log4jJndiInjectionTest.java:850:71:850:87 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | Log4jJndiInjectionTest.java:850:71:850:87 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:850:80:850:87 | source(...) : String | Log4jJndiInjectionTest.java:850:71:850:87 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | Log4jJndiInjectionTest.java:851:56:851:72 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | Log4jJndiInjectionTest.java:851:56:851:72 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:851:65:851:72 | source(...) : String | Log4jJndiInjectionTest.java:851:56:851:72 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | Log4jJndiInjectionTest.java:852:41:852:57 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | Log4jJndiInjectionTest.java:852:41:852:57 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:852:50:852:57 | source(...) : String | Log4jJndiInjectionTest.java:852:41:852:57 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | Log4jJndiInjectionTest.java:853:26:853:42 | (...)... | provenance | Sink:MaD:2295 | -| Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | Log4jJndiInjectionTest.java:853:26:853:42 | (...)... | provenance | Sink:MaD:48300 | +| Log4jJndiInjectionTest.java:853:35:853:42 | source(...) : String | Log4jJndiInjectionTest.java:853:26:853:42 | (...)... | provenance | Sink:MaD:48306 | | Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | Log4jJndiInjectionTest.java:854:26:854:42 | (...)... | provenance | Sink:MaD:2287 | -| Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | Log4jJndiInjectionTest.java:854:26:854:42 | (...)... | provenance | Sink:MaD:48292 | +| Log4jJndiInjectionTest.java:854:35:854:42 | source(...) : String | Log4jJndiInjectionTest.java:854:26:854:42 | (...)... | provenance | Sink:MaD:48298 | | Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | Log4jJndiInjectionTest.java:855:41:855:62 | (...)... | provenance | Sink:MaD:2287 | -| Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | Log4jJndiInjectionTest.java:855:41:855:62 | (...)... | provenance | Sink:MaD:48292 | +| Log4jJndiInjectionTest.java:855:55:855:62 | source(...) : String | Log4jJndiInjectionTest.java:855:41:855:62 | (...)... | provenance | Sink:MaD:48298 | | Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | Log4jJndiInjectionTest.java:856:26:856:42 | (...)... | provenance | Sink:MaD:2299 | -| Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | Log4jJndiInjectionTest.java:856:26:856:42 | (...)... | provenance | Sink:MaD:48304 | +| Log4jJndiInjectionTest.java:856:35:856:42 | source(...) : String | Log4jJndiInjectionTest.java:856:26:856:42 | (...)... | provenance | Sink:MaD:48310 | | Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | Log4jJndiInjectionTest.java:857:26:857:47 | (...)... | provenance | Sink:MaD:2300 | -| Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | Log4jJndiInjectionTest.java:857:26:857:47 | (...)... | provenance | Sink:MaD:48305 | +| Log4jJndiInjectionTest.java:857:40:857:47 | source(...) : String | Log4jJndiInjectionTest.java:857:26:857:47 | (...)... | provenance | Sink:MaD:48311 | | Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | Log4jJndiInjectionTest.java:858:26:858:47 | (...)... | provenance | Sink:MaD:2301 | -| Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | Log4jJndiInjectionTest.java:858:26:858:47 | (...)... | provenance | Sink:MaD:48306 | +| Log4jJndiInjectionTest.java:858:40:858:47 | source(...) : String | Log4jJndiInjectionTest.java:858:26:858:47 | (...)... | provenance | Sink:MaD:48312 | | Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | Log4jJndiInjectionTest.java:859:25:859:47 | (...)... | provenance | Sink:MaD:2302 | -| Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | Log4jJndiInjectionTest.java:859:25:859:47 | (...)... | provenance | Sink:MaD:48316 | +| Log4jJndiInjectionTest.java:859:40:859:47 | source(...) : String | Log4jJndiInjectionTest.java:859:25:859:47 | (...)... | provenance | Sink:MaD:48322 | | Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | Log4jJndiInjectionTest.java:860:25:860:47 | (...)... | provenance | Sink:MaD:2303 | -| Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | Log4jJndiInjectionTest.java:860:25:860:47 | (...)... | provenance | Sink:MaD:48317 | +| Log4jJndiInjectionTest.java:860:40:860:47 | source(...) : String | Log4jJndiInjectionTest.java:860:25:860:47 | (...)... | provenance | Sink:MaD:48323 | | Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | Log4jJndiInjectionTest.java:861:40:861:62 | (...)... | provenance | Sink:MaD:2304 | -| Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | Log4jJndiInjectionTest.java:861:40:861:62 | (...)... | provenance | Sink:MaD:48318 | +| Log4jJndiInjectionTest.java:861:55:861:62 | source(...) : String | Log4jJndiInjectionTest.java:861:40:861:62 | (...)... | provenance | Sink:MaD:48324 | | Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | Log4jJndiInjectionTest.java:862:40:862:62 | (...)... | provenance | Sink:MaD:2305 | -| Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | Log4jJndiInjectionTest.java:862:40:862:62 | (...)... | provenance | Sink:MaD:48319 | +| Log4jJndiInjectionTest.java:862:55:862:62 | source(...) : String | Log4jJndiInjectionTest.java:862:40:862:62 | (...)... | provenance | Sink:MaD:48325 | | Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | Log4jJndiInjectionTest.java:863:40:863:57 | (...)... | provenance | Sink:MaD:2306 | -| Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | Log4jJndiInjectionTest.java:863:40:863:57 | (...)... | provenance | Sink:MaD:48320 | +| Log4jJndiInjectionTest.java:863:50:863:57 | source(...) : String | Log4jJndiInjectionTest.java:863:40:863:57 | (...)... | provenance | Sink:MaD:48326 | | Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | Log4jJndiInjectionTest.java:864:40:864:65 | (...)... | provenance | Sink:MaD:2307 | -| Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | Log4jJndiInjectionTest.java:864:40:864:65 | (...)... | provenance | Sink:MaD:48321 | +| Log4jJndiInjectionTest.java:864:58:864:65 | source(...) : String | Log4jJndiInjectionTest.java:864:40:864:65 | (...)... | provenance | Sink:MaD:48327 | | Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | Log4jJndiInjectionTest.java:865:40:865:65 | (...)... | provenance | Sink:MaD:2308 | -| Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | Log4jJndiInjectionTest.java:865:40:865:65 | (...)... | provenance | Sink:MaD:48322 | +| Log4jJndiInjectionTest.java:865:58:865:65 | source(...) : String | Log4jJndiInjectionTest.java:865:40:865:65 | (...)... | provenance | Sink:MaD:48328 | | Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | Log4jJndiInjectionTest.java:867:40:867:56 | (...)... | provenance | Sink:MaD:2311 | -| Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | Log4jJndiInjectionTest.java:867:40:867:56 | (...)... | provenance | Sink:MaD:48325 | +| Log4jJndiInjectionTest.java:867:49:867:56 | source(...) : String | Log4jJndiInjectionTest.java:867:40:867:56 | (...)... | provenance | Sink:MaD:48331 | | Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | Log4jJndiInjectionTest.java:868:40:868:56 | (...)... | provenance | Sink:MaD:2322 | -| Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | Log4jJndiInjectionTest.java:868:40:868:56 | (...)... | provenance | Sink:MaD:48336 | +| Log4jJndiInjectionTest.java:868:49:868:56 | source(...) : String | Log4jJndiInjectionTest.java:868:40:868:56 | (...)... | provenance | Sink:MaD:48342 | | Log4jJndiInjectionTest.java:869:55:869:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:869:55:869:77 | new Object[] | provenance | Sink:MaD:2322 | -| Log4jJndiInjectionTest.java:869:55:869:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:869:55:869:77 | new Object[] | provenance | Sink:MaD:48336 | +| Log4jJndiInjectionTest.java:869:55:869:77 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:869:55:869:77 | new Object[] | provenance | Sink:MaD:48342 | | Log4jJndiInjectionTest.java:869:69:869:76 | source(...) : String | Log4jJndiInjectionTest.java:869:55:869:77 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | Log4jJndiInjectionTest.java:870:55:870:71 | (...)... | provenance | Sink:MaD:2312 | -| Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | Log4jJndiInjectionTest.java:870:55:870:71 | (...)... | provenance | Sink:MaD:48326 | +| Log4jJndiInjectionTest.java:870:64:870:71 | source(...) : String | Log4jJndiInjectionTest.java:870:55:870:71 | (...)... | provenance | Sink:MaD:48332 | | Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | Log4jJndiInjectionTest.java:871:40:871:56 | (...)... | provenance | Sink:MaD:2312 | -| Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | Log4jJndiInjectionTest.java:871:40:871:56 | (...)... | provenance | Sink:MaD:48326 | +| Log4jJndiInjectionTest.java:871:49:871:56 | source(...) : String | Log4jJndiInjectionTest.java:871:40:871:56 | (...)... | provenance | Sink:MaD:48332 | | Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | Log4jJndiInjectionTest.java:872:70:872:86 | (...)... | provenance | Sink:MaD:2313 | -| Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | Log4jJndiInjectionTest.java:872:70:872:86 | (...)... | provenance | Sink:MaD:48327 | +| Log4jJndiInjectionTest.java:872:79:872:86 | source(...) : String | Log4jJndiInjectionTest.java:872:70:872:86 | (...)... | provenance | Sink:MaD:48333 | | Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | Log4jJndiInjectionTest.java:873:55:873:71 | (...)... | provenance | Sink:MaD:2313 | -| Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | Log4jJndiInjectionTest.java:873:55:873:71 | (...)... | provenance | Sink:MaD:48327 | +| Log4jJndiInjectionTest.java:873:64:873:71 | source(...) : String | Log4jJndiInjectionTest.java:873:55:873:71 | (...)... | provenance | Sink:MaD:48333 | | Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | Log4jJndiInjectionTest.java:874:40:874:56 | (...)... | provenance | Sink:MaD:2313 | -| Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | Log4jJndiInjectionTest.java:874:40:874:56 | (...)... | provenance | Sink:MaD:48327 | +| Log4jJndiInjectionTest.java:874:49:874:56 | source(...) : String | Log4jJndiInjectionTest.java:874:40:874:56 | (...)... | provenance | Sink:MaD:48333 | | Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | Log4jJndiInjectionTest.java:875:85:875:101 | (...)... | provenance | Sink:MaD:2314 | -| Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | Log4jJndiInjectionTest.java:875:85:875:101 | (...)... | provenance | Sink:MaD:48328 | +| Log4jJndiInjectionTest.java:875:94:875:101 | source(...) : String | Log4jJndiInjectionTest.java:875:85:875:101 | (...)... | provenance | Sink:MaD:48334 | | Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | Log4jJndiInjectionTest.java:876:70:876:86 | (...)... | provenance | Sink:MaD:2314 | -| Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | Log4jJndiInjectionTest.java:876:70:876:86 | (...)... | provenance | Sink:MaD:48328 | +| Log4jJndiInjectionTest.java:876:79:876:86 | source(...) : String | Log4jJndiInjectionTest.java:876:70:876:86 | (...)... | provenance | Sink:MaD:48334 | | Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | Log4jJndiInjectionTest.java:877:55:877:71 | (...)... | provenance | Sink:MaD:2314 | -| Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | Log4jJndiInjectionTest.java:877:55:877:71 | (...)... | provenance | Sink:MaD:48328 | +| Log4jJndiInjectionTest.java:877:64:877:71 | source(...) : String | Log4jJndiInjectionTest.java:877:55:877:71 | (...)... | provenance | Sink:MaD:48334 | | Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | Log4jJndiInjectionTest.java:878:40:878:56 | (...)... | provenance | Sink:MaD:2314 | -| Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | Log4jJndiInjectionTest.java:878:40:878:56 | (...)... | provenance | Sink:MaD:48328 | +| Log4jJndiInjectionTest.java:878:49:878:56 | source(...) : String | Log4jJndiInjectionTest.java:878:40:878:56 | (...)... | provenance | Sink:MaD:48334 | | Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | Log4jJndiInjectionTest.java:879:100:879:116 | (...)... | provenance | Sink:MaD:2315 | -| Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | Log4jJndiInjectionTest.java:879:100:879:116 | (...)... | provenance | Sink:MaD:48329 | +| Log4jJndiInjectionTest.java:879:109:879:116 | source(...) : String | Log4jJndiInjectionTest.java:879:100:879:116 | (...)... | provenance | Sink:MaD:48335 | | Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | Log4jJndiInjectionTest.java:880:85:880:101 | (...)... | provenance | Sink:MaD:2315 | -| Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | Log4jJndiInjectionTest.java:880:85:880:101 | (...)... | provenance | Sink:MaD:48329 | +| Log4jJndiInjectionTest.java:880:94:880:101 | source(...) : String | Log4jJndiInjectionTest.java:880:85:880:101 | (...)... | provenance | Sink:MaD:48335 | | Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | Log4jJndiInjectionTest.java:881:70:881:86 | (...)... | provenance | Sink:MaD:2315 | -| Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | Log4jJndiInjectionTest.java:881:70:881:86 | (...)... | provenance | Sink:MaD:48329 | +| Log4jJndiInjectionTest.java:881:79:881:86 | source(...) : String | Log4jJndiInjectionTest.java:881:70:881:86 | (...)... | provenance | Sink:MaD:48335 | | Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | Log4jJndiInjectionTest.java:882:55:882:71 | (...)... | provenance | Sink:MaD:2315 | -| Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | Log4jJndiInjectionTest.java:882:55:882:71 | (...)... | provenance | Sink:MaD:48329 | +| Log4jJndiInjectionTest.java:882:64:882:71 | source(...) : String | Log4jJndiInjectionTest.java:882:55:882:71 | (...)... | provenance | Sink:MaD:48335 | | Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | Log4jJndiInjectionTest.java:883:40:883:56 | (...)... | provenance | Sink:MaD:2315 | -| Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | Log4jJndiInjectionTest.java:883:40:883:56 | (...)... | provenance | Sink:MaD:48329 | +| Log4jJndiInjectionTest.java:883:49:883:56 | source(...) : String | Log4jJndiInjectionTest.java:883:40:883:56 | (...)... | provenance | Sink:MaD:48335 | | Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | Log4jJndiInjectionTest.java:884:115:884:131 | (...)... | provenance | Sink:MaD:2316 | -| Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | Log4jJndiInjectionTest.java:884:115:884:131 | (...)... | provenance | Sink:MaD:48330 | +| Log4jJndiInjectionTest.java:884:124:884:131 | source(...) : String | Log4jJndiInjectionTest.java:884:115:884:131 | (...)... | provenance | Sink:MaD:48336 | | Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | Log4jJndiInjectionTest.java:885:100:885:116 | (...)... | provenance | Sink:MaD:2316 | -| Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | Log4jJndiInjectionTest.java:885:100:885:116 | (...)... | provenance | Sink:MaD:48330 | +| Log4jJndiInjectionTest.java:885:109:885:116 | source(...) : String | Log4jJndiInjectionTest.java:885:100:885:116 | (...)... | provenance | Sink:MaD:48336 | | Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | Log4jJndiInjectionTest.java:886:85:886:101 | (...)... | provenance | Sink:MaD:2316 | -| Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | Log4jJndiInjectionTest.java:886:85:886:101 | (...)... | provenance | Sink:MaD:48330 | +| Log4jJndiInjectionTest.java:886:94:886:101 | source(...) : String | Log4jJndiInjectionTest.java:886:85:886:101 | (...)... | provenance | Sink:MaD:48336 | | Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | Log4jJndiInjectionTest.java:887:70:887:86 | (...)... | provenance | Sink:MaD:2316 | -| Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | Log4jJndiInjectionTest.java:887:70:887:86 | (...)... | provenance | Sink:MaD:48330 | +| Log4jJndiInjectionTest.java:887:79:887:86 | source(...) : String | Log4jJndiInjectionTest.java:887:70:887:86 | (...)... | provenance | Sink:MaD:48336 | | Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | Log4jJndiInjectionTest.java:888:55:888:71 | (...)... | provenance | Sink:MaD:2316 | -| Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | Log4jJndiInjectionTest.java:888:55:888:71 | (...)... | provenance | Sink:MaD:48330 | +| Log4jJndiInjectionTest.java:888:64:888:71 | source(...) : String | Log4jJndiInjectionTest.java:888:55:888:71 | (...)... | provenance | Sink:MaD:48336 | | Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | Log4jJndiInjectionTest.java:889:40:889:56 | (...)... | provenance | Sink:MaD:2316 | -| Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | Log4jJndiInjectionTest.java:889:40:889:56 | (...)... | provenance | Sink:MaD:48330 | +| Log4jJndiInjectionTest.java:889:49:889:56 | source(...) : String | Log4jJndiInjectionTest.java:889:40:889:56 | (...)... | provenance | Sink:MaD:48336 | | Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | Log4jJndiInjectionTest.java:890:130:890:146 | (...)... | provenance | Sink:MaD:2317 | -| Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | Log4jJndiInjectionTest.java:890:130:890:146 | (...)... | provenance | Sink:MaD:48331 | +| Log4jJndiInjectionTest.java:890:139:890:146 | source(...) : String | Log4jJndiInjectionTest.java:890:130:890:146 | (...)... | provenance | Sink:MaD:48337 | | Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | Log4jJndiInjectionTest.java:891:115:891:131 | (...)... | provenance | Sink:MaD:2317 | -| Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | Log4jJndiInjectionTest.java:891:115:891:131 | (...)... | provenance | Sink:MaD:48331 | +| Log4jJndiInjectionTest.java:891:124:891:131 | source(...) : String | Log4jJndiInjectionTest.java:891:115:891:131 | (...)... | provenance | Sink:MaD:48337 | | Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | Log4jJndiInjectionTest.java:892:100:892:116 | (...)... | provenance | Sink:MaD:2317 | -| Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | Log4jJndiInjectionTest.java:892:100:892:116 | (...)... | provenance | Sink:MaD:48331 | +| Log4jJndiInjectionTest.java:892:109:892:116 | source(...) : String | Log4jJndiInjectionTest.java:892:100:892:116 | (...)... | provenance | Sink:MaD:48337 | | Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | Log4jJndiInjectionTest.java:893:85:893:101 | (...)... | provenance | Sink:MaD:2317 | -| Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | Log4jJndiInjectionTest.java:893:85:893:101 | (...)... | provenance | Sink:MaD:48331 | +| Log4jJndiInjectionTest.java:893:94:893:101 | source(...) : String | Log4jJndiInjectionTest.java:893:85:893:101 | (...)... | provenance | Sink:MaD:48337 | | Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | Log4jJndiInjectionTest.java:894:70:894:86 | (...)... | provenance | Sink:MaD:2317 | -| Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | Log4jJndiInjectionTest.java:894:70:894:86 | (...)... | provenance | Sink:MaD:48331 | +| Log4jJndiInjectionTest.java:894:79:894:86 | source(...) : String | Log4jJndiInjectionTest.java:894:70:894:86 | (...)... | provenance | Sink:MaD:48337 | | Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | Log4jJndiInjectionTest.java:895:55:895:71 | (...)... | provenance | Sink:MaD:2317 | -| Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | Log4jJndiInjectionTest.java:895:55:895:71 | (...)... | provenance | Sink:MaD:48331 | +| Log4jJndiInjectionTest.java:895:64:895:71 | source(...) : String | Log4jJndiInjectionTest.java:895:55:895:71 | (...)... | provenance | Sink:MaD:48337 | | Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | Log4jJndiInjectionTest.java:896:40:896:56 | (...)... | provenance | Sink:MaD:2317 | -| Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | Log4jJndiInjectionTest.java:896:40:896:56 | (...)... | provenance | Sink:MaD:48331 | +| Log4jJndiInjectionTest.java:896:49:896:56 | source(...) : String | Log4jJndiInjectionTest.java:896:40:896:56 | (...)... | provenance | Sink:MaD:48337 | | Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | Log4jJndiInjectionTest.java:897:145:897:161 | (...)... | provenance | Sink:MaD:2318 | -| Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | Log4jJndiInjectionTest.java:897:145:897:161 | (...)... | provenance | Sink:MaD:48332 | +| Log4jJndiInjectionTest.java:897:154:897:161 | source(...) : String | Log4jJndiInjectionTest.java:897:145:897:161 | (...)... | provenance | Sink:MaD:48338 | | Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | Log4jJndiInjectionTest.java:898:130:898:146 | (...)... | provenance | Sink:MaD:2318 | -| Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | Log4jJndiInjectionTest.java:898:130:898:146 | (...)... | provenance | Sink:MaD:48332 | +| Log4jJndiInjectionTest.java:898:139:898:146 | source(...) : String | Log4jJndiInjectionTest.java:898:130:898:146 | (...)... | provenance | Sink:MaD:48338 | | Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | Log4jJndiInjectionTest.java:899:115:899:131 | (...)... | provenance | Sink:MaD:2318 | -| Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | Log4jJndiInjectionTest.java:899:115:899:131 | (...)... | provenance | Sink:MaD:48332 | +| Log4jJndiInjectionTest.java:899:124:899:131 | source(...) : String | Log4jJndiInjectionTest.java:899:115:899:131 | (...)... | provenance | Sink:MaD:48338 | | Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | Log4jJndiInjectionTest.java:900:100:900:116 | (...)... | provenance | Sink:MaD:2318 | -| Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | Log4jJndiInjectionTest.java:900:100:900:116 | (...)... | provenance | Sink:MaD:48332 | +| Log4jJndiInjectionTest.java:900:109:900:116 | source(...) : String | Log4jJndiInjectionTest.java:900:100:900:116 | (...)... | provenance | Sink:MaD:48338 | | Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | Log4jJndiInjectionTest.java:901:85:901:101 | (...)... | provenance | Sink:MaD:2318 | -| Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | Log4jJndiInjectionTest.java:901:85:901:101 | (...)... | provenance | Sink:MaD:48332 | +| Log4jJndiInjectionTest.java:901:94:901:101 | source(...) : String | Log4jJndiInjectionTest.java:901:85:901:101 | (...)... | provenance | Sink:MaD:48338 | | Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | Log4jJndiInjectionTest.java:902:70:902:86 | (...)... | provenance | Sink:MaD:2318 | -| Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | Log4jJndiInjectionTest.java:902:70:902:86 | (...)... | provenance | Sink:MaD:48332 | +| Log4jJndiInjectionTest.java:902:79:902:86 | source(...) : String | Log4jJndiInjectionTest.java:902:70:902:86 | (...)... | provenance | Sink:MaD:48338 | | Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | Log4jJndiInjectionTest.java:903:55:903:71 | (...)... | provenance | Sink:MaD:2318 | -| Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | Log4jJndiInjectionTest.java:903:55:903:71 | (...)... | provenance | Sink:MaD:48332 | +| Log4jJndiInjectionTest.java:903:64:903:71 | source(...) : String | Log4jJndiInjectionTest.java:903:55:903:71 | (...)... | provenance | Sink:MaD:48338 | | Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | Log4jJndiInjectionTest.java:904:40:904:56 | (...)... | provenance | Sink:MaD:2318 | -| Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | Log4jJndiInjectionTest.java:904:40:904:56 | (...)... | provenance | Sink:MaD:48332 | +| Log4jJndiInjectionTest.java:904:49:904:56 | source(...) : String | Log4jJndiInjectionTest.java:904:40:904:56 | (...)... | provenance | Sink:MaD:48338 | | Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | Log4jJndiInjectionTest.java:905:160:905:176 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | Log4jJndiInjectionTest.java:905:160:905:176 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:905:169:905:176 | source(...) : String | Log4jJndiInjectionTest.java:905:160:905:176 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | Log4jJndiInjectionTest.java:906:145:906:161 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | Log4jJndiInjectionTest.java:906:145:906:161 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:906:154:906:161 | source(...) : String | Log4jJndiInjectionTest.java:906:145:906:161 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | Log4jJndiInjectionTest.java:907:130:907:146 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | Log4jJndiInjectionTest.java:907:130:907:146 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:907:139:907:146 | source(...) : String | Log4jJndiInjectionTest.java:907:130:907:146 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | Log4jJndiInjectionTest.java:908:115:908:131 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | Log4jJndiInjectionTest.java:908:115:908:131 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:908:124:908:131 | source(...) : String | Log4jJndiInjectionTest.java:908:115:908:131 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | Log4jJndiInjectionTest.java:909:100:909:116 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | Log4jJndiInjectionTest.java:909:100:909:116 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:909:109:909:116 | source(...) : String | Log4jJndiInjectionTest.java:909:100:909:116 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | Log4jJndiInjectionTest.java:910:85:910:101 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | Log4jJndiInjectionTest.java:910:85:910:101 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:910:94:910:101 | source(...) : String | Log4jJndiInjectionTest.java:910:85:910:101 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | Log4jJndiInjectionTest.java:911:70:911:86 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | Log4jJndiInjectionTest.java:911:70:911:86 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:911:79:911:86 | source(...) : String | Log4jJndiInjectionTest.java:911:70:911:86 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | Log4jJndiInjectionTest.java:912:55:912:71 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | Log4jJndiInjectionTest.java:912:55:912:71 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:912:64:912:71 | source(...) : String | Log4jJndiInjectionTest.java:912:55:912:71 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | Log4jJndiInjectionTest.java:913:40:913:56 | (...)... | provenance | Sink:MaD:2319 | -| Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | Log4jJndiInjectionTest.java:913:40:913:56 | (...)... | provenance | Sink:MaD:48333 | +| Log4jJndiInjectionTest.java:913:49:913:56 | source(...) : String | Log4jJndiInjectionTest.java:913:40:913:56 | (...)... | provenance | Sink:MaD:48339 | | Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | Log4jJndiInjectionTest.java:914:175:914:191 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | Log4jJndiInjectionTest.java:914:175:914:191 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:914:184:914:191 | source(...) : String | Log4jJndiInjectionTest.java:914:175:914:191 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | Log4jJndiInjectionTest.java:915:160:915:176 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | Log4jJndiInjectionTest.java:915:160:915:176 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:915:169:915:176 | source(...) : String | Log4jJndiInjectionTest.java:915:160:915:176 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | Log4jJndiInjectionTest.java:916:145:916:161 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | Log4jJndiInjectionTest.java:916:145:916:161 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:916:154:916:161 | source(...) : String | Log4jJndiInjectionTest.java:916:145:916:161 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | Log4jJndiInjectionTest.java:917:130:917:146 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | Log4jJndiInjectionTest.java:917:130:917:146 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:917:139:917:146 | source(...) : String | Log4jJndiInjectionTest.java:917:130:917:146 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | Log4jJndiInjectionTest.java:918:115:918:131 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | Log4jJndiInjectionTest.java:918:115:918:131 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:918:124:918:131 | source(...) : String | Log4jJndiInjectionTest.java:918:115:918:131 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | Log4jJndiInjectionTest.java:919:100:919:116 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | Log4jJndiInjectionTest.java:919:100:919:116 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:919:109:919:116 | source(...) : String | Log4jJndiInjectionTest.java:919:100:919:116 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | Log4jJndiInjectionTest.java:920:85:920:101 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | Log4jJndiInjectionTest.java:920:85:920:101 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:920:94:920:101 | source(...) : String | Log4jJndiInjectionTest.java:920:85:920:101 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | Log4jJndiInjectionTest.java:921:70:921:86 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | Log4jJndiInjectionTest.java:921:70:921:86 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:921:79:921:86 | source(...) : String | Log4jJndiInjectionTest.java:921:70:921:86 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | Log4jJndiInjectionTest.java:922:55:922:71 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | Log4jJndiInjectionTest.java:922:55:922:71 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:922:64:922:71 | source(...) : String | Log4jJndiInjectionTest.java:922:55:922:71 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | Log4jJndiInjectionTest.java:923:40:923:56 | (...)... | provenance | Sink:MaD:2320 | -| Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | Log4jJndiInjectionTest.java:923:40:923:56 | (...)... | provenance | Sink:MaD:48334 | +| Log4jJndiInjectionTest.java:923:49:923:56 | source(...) : String | Log4jJndiInjectionTest.java:923:40:923:56 | (...)... | provenance | Sink:MaD:48340 | | Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | Log4jJndiInjectionTest.java:924:40:924:56 | (...)... | provenance | Sink:MaD:2312 | -| Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | Log4jJndiInjectionTest.java:924:40:924:56 | (...)... | provenance | Sink:MaD:48326 | +| Log4jJndiInjectionTest.java:924:49:924:56 | source(...) : String | Log4jJndiInjectionTest.java:924:40:924:56 | (...)... | provenance | Sink:MaD:48332 | | Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | Log4jJndiInjectionTest.java:925:55:925:76 | (...)... | provenance | Sink:MaD:2312 | -| Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | Log4jJndiInjectionTest.java:925:55:925:76 | (...)... | provenance | Sink:MaD:48326 | +| Log4jJndiInjectionTest.java:925:69:925:76 | source(...) : String | Log4jJndiInjectionTest.java:925:55:925:76 | (...)... | provenance | Sink:MaD:48332 | | Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | Log4jJndiInjectionTest.java:926:40:926:56 | (...)... | provenance | Sink:MaD:2324 | -| Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | Log4jJndiInjectionTest.java:926:40:926:56 | (...)... | provenance | Sink:MaD:48338 | +| Log4jJndiInjectionTest.java:926:49:926:56 | source(...) : String | Log4jJndiInjectionTest.java:926:40:926:56 | (...)... | provenance | Sink:MaD:48344 | | Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | Log4jJndiInjectionTest.java:927:40:927:61 | (...)... | provenance | Sink:MaD:2325 | -| Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | Log4jJndiInjectionTest.java:927:40:927:61 | (...)... | provenance | Sink:MaD:48339 | +| Log4jJndiInjectionTest.java:927:54:927:61 | source(...) : String | Log4jJndiInjectionTest.java:927:40:927:61 | (...)... | provenance | Sink:MaD:48345 | | Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | Log4jJndiInjectionTest.java:928:40:928:61 | (...)... | provenance | Sink:MaD:2326 | -| Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | Log4jJndiInjectionTest.java:928:40:928:61 | (...)... | provenance | Sink:MaD:48340 | +| Log4jJndiInjectionTest.java:928:54:928:61 | source(...) : String | Log4jJndiInjectionTest.java:928:40:928:61 | (...)... | provenance | Sink:MaD:48346 | | Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | Log4jJndiInjectionTest.java:929:25:929:50 | (...)... | provenance | Sink:MaD:2329 | -| Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | Log4jJndiInjectionTest.java:929:25:929:50 | (...)... | provenance | Sink:MaD:48343 | +| Log4jJndiInjectionTest.java:929:43:929:50 | source(...) : String | Log4jJndiInjectionTest.java:929:25:929:50 | (...)... | provenance | Sink:MaD:48349 | | Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | Log4jJndiInjectionTest.java:930:25:930:50 | (...)... | provenance | Sink:MaD:2330 | -| Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | Log4jJndiInjectionTest.java:930:25:930:50 | (...)... | provenance | Sink:MaD:48344 | +| Log4jJndiInjectionTest.java:930:43:930:50 | source(...) : String | Log4jJndiInjectionTest.java:930:25:930:50 | (...)... | provenance | Sink:MaD:48350 | | Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | Log4jJndiInjectionTest.java:931:25:931:42 | (...)... | provenance | Sink:MaD:2327 | -| Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | Log4jJndiInjectionTest.java:931:25:931:42 | (...)... | provenance | Sink:MaD:48341 | +| Log4jJndiInjectionTest.java:931:35:931:42 | source(...) : String | Log4jJndiInjectionTest.java:931:25:931:42 | (...)... | provenance | Sink:MaD:48347 | | Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | Log4jJndiInjectionTest.java:932:25:932:42 | (...)... | provenance | Sink:MaD:2328 | -| Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | Log4jJndiInjectionTest.java:932:25:932:42 | (...)... | provenance | Sink:MaD:48342 | +| Log4jJndiInjectionTest.java:932:35:932:42 | source(...) : String | Log4jJndiInjectionTest.java:932:25:932:42 | (...)... | provenance | Sink:MaD:48348 | | Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | Log4jJndiInjectionTest.java:935:25:935:41 | (...)... | provenance | Sink:MaD:2333 | -| Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | Log4jJndiInjectionTest.java:935:25:935:41 | (...)... | provenance | Sink:MaD:48347 | +| Log4jJndiInjectionTest.java:935:34:935:41 | source(...) : String | Log4jJndiInjectionTest.java:935:25:935:41 | (...)... | provenance | Sink:MaD:48353 | | Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | Log4jJndiInjectionTest.java:936:25:936:41 | (...)... | provenance | Sink:MaD:2344 | -| Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | Log4jJndiInjectionTest.java:936:25:936:41 | (...)... | provenance | Sink:MaD:48358 | +| Log4jJndiInjectionTest.java:936:34:936:41 | source(...) : String | Log4jJndiInjectionTest.java:936:25:936:41 | (...)... | provenance | Sink:MaD:48364 | | Log4jJndiInjectionTest.java:937:40:937:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:937:40:937:62 | new Object[] | provenance | Sink:MaD:2344 | -| Log4jJndiInjectionTest.java:937:40:937:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:937:40:937:62 | new Object[] | provenance | Sink:MaD:48358 | +| Log4jJndiInjectionTest.java:937:40:937:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:937:40:937:62 | new Object[] | provenance | Sink:MaD:48364 | | Log4jJndiInjectionTest.java:937:54:937:61 | source(...) : String | Log4jJndiInjectionTest.java:937:40:937:62 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | Log4jJndiInjectionTest.java:938:40:938:56 | (...)... | provenance | Sink:MaD:2334 | -| Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | Log4jJndiInjectionTest.java:938:40:938:56 | (...)... | provenance | Sink:MaD:48348 | +| Log4jJndiInjectionTest.java:938:49:938:56 | source(...) : String | Log4jJndiInjectionTest.java:938:40:938:56 | (...)... | provenance | Sink:MaD:48354 | | Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | Log4jJndiInjectionTest.java:939:25:939:41 | (...)... | provenance | Sink:MaD:2334 | -| Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | Log4jJndiInjectionTest.java:939:25:939:41 | (...)... | provenance | Sink:MaD:48348 | +| Log4jJndiInjectionTest.java:939:34:939:41 | source(...) : String | Log4jJndiInjectionTest.java:939:25:939:41 | (...)... | provenance | Sink:MaD:48354 | | Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | Log4jJndiInjectionTest.java:940:55:940:71 | (...)... | provenance | Sink:MaD:2335 | -| Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | Log4jJndiInjectionTest.java:940:55:940:71 | (...)... | provenance | Sink:MaD:48349 | +| Log4jJndiInjectionTest.java:940:64:940:71 | source(...) : String | Log4jJndiInjectionTest.java:940:55:940:71 | (...)... | provenance | Sink:MaD:48355 | | Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | Log4jJndiInjectionTest.java:941:40:941:56 | (...)... | provenance | Sink:MaD:2335 | -| Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | Log4jJndiInjectionTest.java:941:40:941:56 | (...)... | provenance | Sink:MaD:48349 | +| Log4jJndiInjectionTest.java:941:49:941:56 | source(...) : String | Log4jJndiInjectionTest.java:941:40:941:56 | (...)... | provenance | Sink:MaD:48355 | | Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | Log4jJndiInjectionTest.java:942:25:942:41 | (...)... | provenance | Sink:MaD:2335 | -| Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | Log4jJndiInjectionTest.java:942:25:942:41 | (...)... | provenance | Sink:MaD:48349 | +| Log4jJndiInjectionTest.java:942:34:942:41 | source(...) : String | Log4jJndiInjectionTest.java:942:25:942:41 | (...)... | provenance | Sink:MaD:48355 | | Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | Log4jJndiInjectionTest.java:943:70:943:86 | (...)... | provenance | Sink:MaD:2336 | -| Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | Log4jJndiInjectionTest.java:943:70:943:86 | (...)... | provenance | Sink:MaD:48350 | +| Log4jJndiInjectionTest.java:943:79:943:86 | source(...) : String | Log4jJndiInjectionTest.java:943:70:943:86 | (...)... | provenance | Sink:MaD:48356 | | Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | Log4jJndiInjectionTest.java:944:55:944:71 | (...)... | provenance | Sink:MaD:2336 | -| Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | Log4jJndiInjectionTest.java:944:55:944:71 | (...)... | provenance | Sink:MaD:48350 | +| Log4jJndiInjectionTest.java:944:64:944:71 | source(...) : String | Log4jJndiInjectionTest.java:944:55:944:71 | (...)... | provenance | Sink:MaD:48356 | | Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | Log4jJndiInjectionTest.java:945:40:945:56 | (...)... | provenance | Sink:MaD:2336 | -| Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | Log4jJndiInjectionTest.java:945:40:945:56 | (...)... | provenance | Sink:MaD:48350 | +| Log4jJndiInjectionTest.java:945:49:945:56 | source(...) : String | Log4jJndiInjectionTest.java:945:40:945:56 | (...)... | provenance | Sink:MaD:48356 | | Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | Log4jJndiInjectionTest.java:946:25:946:41 | (...)... | provenance | Sink:MaD:2336 | -| Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | Log4jJndiInjectionTest.java:946:25:946:41 | (...)... | provenance | Sink:MaD:48350 | +| Log4jJndiInjectionTest.java:946:34:946:41 | source(...) : String | Log4jJndiInjectionTest.java:946:25:946:41 | (...)... | provenance | Sink:MaD:48356 | | Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | Log4jJndiInjectionTest.java:947:85:947:101 | (...)... | provenance | Sink:MaD:2337 | -| Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | Log4jJndiInjectionTest.java:947:85:947:101 | (...)... | provenance | Sink:MaD:48351 | +| Log4jJndiInjectionTest.java:947:94:947:101 | source(...) : String | Log4jJndiInjectionTest.java:947:85:947:101 | (...)... | provenance | Sink:MaD:48357 | | Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | Log4jJndiInjectionTest.java:948:70:948:86 | (...)... | provenance | Sink:MaD:2337 | -| Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | Log4jJndiInjectionTest.java:948:70:948:86 | (...)... | provenance | Sink:MaD:48351 | +| Log4jJndiInjectionTest.java:948:79:948:86 | source(...) : String | Log4jJndiInjectionTest.java:948:70:948:86 | (...)... | provenance | Sink:MaD:48357 | | Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | Log4jJndiInjectionTest.java:949:55:949:71 | (...)... | provenance | Sink:MaD:2337 | -| Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | Log4jJndiInjectionTest.java:949:55:949:71 | (...)... | provenance | Sink:MaD:48351 | +| Log4jJndiInjectionTest.java:949:64:949:71 | source(...) : String | Log4jJndiInjectionTest.java:949:55:949:71 | (...)... | provenance | Sink:MaD:48357 | | Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | Log4jJndiInjectionTest.java:950:40:950:56 | (...)... | provenance | Sink:MaD:2337 | -| Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | Log4jJndiInjectionTest.java:950:40:950:56 | (...)... | provenance | Sink:MaD:48351 | +| Log4jJndiInjectionTest.java:950:49:950:56 | source(...) : String | Log4jJndiInjectionTest.java:950:40:950:56 | (...)... | provenance | Sink:MaD:48357 | | Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | Log4jJndiInjectionTest.java:951:25:951:41 | (...)... | provenance | Sink:MaD:2337 | -| Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | Log4jJndiInjectionTest.java:951:25:951:41 | (...)... | provenance | Sink:MaD:48351 | +| Log4jJndiInjectionTest.java:951:34:951:41 | source(...) : String | Log4jJndiInjectionTest.java:951:25:951:41 | (...)... | provenance | Sink:MaD:48357 | | Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | Log4jJndiInjectionTest.java:952:100:952:116 | (...)... | provenance | Sink:MaD:2338 | -| Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | Log4jJndiInjectionTest.java:952:100:952:116 | (...)... | provenance | Sink:MaD:48352 | +| Log4jJndiInjectionTest.java:952:109:952:116 | source(...) : String | Log4jJndiInjectionTest.java:952:100:952:116 | (...)... | provenance | Sink:MaD:48358 | | Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | Log4jJndiInjectionTest.java:953:85:953:101 | (...)... | provenance | Sink:MaD:2338 | -| Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | Log4jJndiInjectionTest.java:953:85:953:101 | (...)... | provenance | Sink:MaD:48352 | +| Log4jJndiInjectionTest.java:953:94:953:101 | source(...) : String | Log4jJndiInjectionTest.java:953:85:953:101 | (...)... | provenance | Sink:MaD:48358 | | Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | Log4jJndiInjectionTest.java:954:70:954:86 | (...)... | provenance | Sink:MaD:2338 | -| Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | Log4jJndiInjectionTest.java:954:70:954:86 | (...)... | provenance | Sink:MaD:48352 | +| Log4jJndiInjectionTest.java:954:79:954:86 | source(...) : String | Log4jJndiInjectionTest.java:954:70:954:86 | (...)... | provenance | Sink:MaD:48358 | | Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | Log4jJndiInjectionTest.java:955:55:955:71 | (...)... | provenance | Sink:MaD:2338 | -| Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | Log4jJndiInjectionTest.java:955:55:955:71 | (...)... | provenance | Sink:MaD:48352 | +| Log4jJndiInjectionTest.java:955:64:955:71 | source(...) : String | Log4jJndiInjectionTest.java:955:55:955:71 | (...)... | provenance | Sink:MaD:48358 | | Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | Log4jJndiInjectionTest.java:956:40:956:56 | (...)... | provenance | Sink:MaD:2338 | -| Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | Log4jJndiInjectionTest.java:956:40:956:56 | (...)... | provenance | Sink:MaD:48352 | +| Log4jJndiInjectionTest.java:956:49:956:56 | source(...) : String | Log4jJndiInjectionTest.java:956:40:956:56 | (...)... | provenance | Sink:MaD:48358 | | Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | Log4jJndiInjectionTest.java:957:25:957:41 | (...)... | provenance | Sink:MaD:2338 | -| Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | Log4jJndiInjectionTest.java:957:25:957:41 | (...)... | provenance | Sink:MaD:48352 | +| Log4jJndiInjectionTest.java:957:34:957:41 | source(...) : String | Log4jJndiInjectionTest.java:957:25:957:41 | (...)... | provenance | Sink:MaD:48358 | | Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | Log4jJndiInjectionTest.java:958:115:958:131 | (...)... | provenance | Sink:MaD:2339 | -| Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | Log4jJndiInjectionTest.java:958:115:958:131 | (...)... | provenance | Sink:MaD:48353 | +| Log4jJndiInjectionTest.java:958:124:958:131 | source(...) : String | Log4jJndiInjectionTest.java:958:115:958:131 | (...)... | provenance | Sink:MaD:48359 | | Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | Log4jJndiInjectionTest.java:959:100:959:116 | (...)... | provenance | Sink:MaD:2339 | -| Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | Log4jJndiInjectionTest.java:959:100:959:116 | (...)... | provenance | Sink:MaD:48353 | +| Log4jJndiInjectionTest.java:959:109:959:116 | source(...) : String | Log4jJndiInjectionTest.java:959:100:959:116 | (...)... | provenance | Sink:MaD:48359 | | Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | Log4jJndiInjectionTest.java:960:85:960:101 | (...)... | provenance | Sink:MaD:2339 | -| Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | Log4jJndiInjectionTest.java:960:85:960:101 | (...)... | provenance | Sink:MaD:48353 | +| Log4jJndiInjectionTest.java:960:94:960:101 | source(...) : String | Log4jJndiInjectionTest.java:960:85:960:101 | (...)... | provenance | Sink:MaD:48359 | | Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | Log4jJndiInjectionTest.java:961:70:961:86 | (...)... | provenance | Sink:MaD:2339 | -| Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | Log4jJndiInjectionTest.java:961:70:961:86 | (...)... | provenance | Sink:MaD:48353 | +| Log4jJndiInjectionTest.java:961:79:961:86 | source(...) : String | Log4jJndiInjectionTest.java:961:70:961:86 | (...)... | provenance | Sink:MaD:48359 | | Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | Log4jJndiInjectionTest.java:962:55:962:71 | (...)... | provenance | Sink:MaD:2339 | -| Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | Log4jJndiInjectionTest.java:962:55:962:71 | (...)... | provenance | Sink:MaD:48353 | +| Log4jJndiInjectionTest.java:962:64:962:71 | source(...) : String | Log4jJndiInjectionTest.java:962:55:962:71 | (...)... | provenance | Sink:MaD:48359 | | Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | Log4jJndiInjectionTest.java:963:40:963:56 | (...)... | provenance | Sink:MaD:2339 | -| Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | Log4jJndiInjectionTest.java:963:40:963:56 | (...)... | provenance | Sink:MaD:48353 | +| Log4jJndiInjectionTest.java:963:49:963:56 | source(...) : String | Log4jJndiInjectionTest.java:963:40:963:56 | (...)... | provenance | Sink:MaD:48359 | | Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | Log4jJndiInjectionTest.java:964:25:964:41 | (...)... | provenance | Sink:MaD:2339 | -| Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | Log4jJndiInjectionTest.java:964:25:964:41 | (...)... | provenance | Sink:MaD:48353 | +| Log4jJndiInjectionTest.java:964:34:964:41 | source(...) : String | Log4jJndiInjectionTest.java:964:25:964:41 | (...)... | provenance | Sink:MaD:48359 | | Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | Log4jJndiInjectionTest.java:965:130:965:146 | (...)... | provenance | Sink:MaD:2340 | -| Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | Log4jJndiInjectionTest.java:965:130:965:146 | (...)... | provenance | Sink:MaD:48354 | +| Log4jJndiInjectionTest.java:965:139:965:146 | source(...) : String | Log4jJndiInjectionTest.java:965:130:965:146 | (...)... | provenance | Sink:MaD:48360 | | Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | Log4jJndiInjectionTest.java:966:115:966:131 | (...)... | provenance | Sink:MaD:2340 | -| Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | Log4jJndiInjectionTest.java:966:115:966:131 | (...)... | provenance | Sink:MaD:48354 | +| Log4jJndiInjectionTest.java:966:124:966:131 | source(...) : String | Log4jJndiInjectionTest.java:966:115:966:131 | (...)... | provenance | Sink:MaD:48360 | | Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | Log4jJndiInjectionTest.java:967:100:967:116 | (...)... | provenance | Sink:MaD:2340 | -| Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | Log4jJndiInjectionTest.java:967:100:967:116 | (...)... | provenance | Sink:MaD:48354 | +| Log4jJndiInjectionTest.java:967:109:967:116 | source(...) : String | Log4jJndiInjectionTest.java:967:100:967:116 | (...)... | provenance | Sink:MaD:48360 | | Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | Log4jJndiInjectionTest.java:968:85:968:101 | (...)... | provenance | Sink:MaD:2340 | -| Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | Log4jJndiInjectionTest.java:968:85:968:101 | (...)... | provenance | Sink:MaD:48354 | +| Log4jJndiInjectionTest.java:968:94:968:101 | source(...) : String | Log4jJndiInjectionTest.java:968:85:968:101 | (...)... | provenance | Sink:MaD:48360 | | Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | Log4jJndiInjectionTest.java:969:70:969:86 | (...)... | provenance | Sink:MaD:2340 | -| Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | Log4jJndiInjectionTest.java:969:70:969:86 | (...)... | provenance | Sink:MaD:48354 | +| Log4jJndiInjectionTest.java:969:79:969:86 | source(...) : String | Log4jJndiInjectionTest.java:969:70:969:86 | (...)... | provenance | Sink:MaD:48360 | | Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | Log4jJndiInjectionTest.java:970:55:970:71 | (...)... | provenance | Sink:MaD:2340 | -| Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | Log4jJndiInjectionTest.java:970:55:970:71 | (...)... | provenance | Sink:MaD:48354 | +| Log4jJndiInjectionTest.java:970:64:970:71 | source(...) : String | Log4jJndiInjectionTest.java:970:55:970:71 | (...)... | provenance | Sink:MaD:48360 | | Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | Log4jJndiInjectionTest.java:971:40:971:56 | (...)... | provenance | Sink:MaD:2340 | -| Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | Log4jJndiInjectionTest.java:971:40:971:56 | (...)... | provenance | Sink:MaD:48354 | +| Log4jJndiInjectionTest.java:971:49:971:56 | source(...) : String | Log4jJndiInjectionTest.java:971:40:971:56 | (...)... | provenance | Sink:MaD:48360 | | Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | Log4jJndiInjectionTest.java:972:25:972:41 | (...)... | provenance | Sink:MaD:2340 | -| Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | Log4jJndiInjectionTest.java:972:25:972:41 | (...)... | provenance | Sink:MaD:48354 | +| Log4jJndiInjectionTest.java:972:34:972:41 | source(...) : String | Log4jJndiInjectionTest.java:972:25:972:41 | (...)... | provenance | Sink:MaD:48360 | | Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | Log4jJndiInjectionTest.java:973:145:973:161 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | Log4jJndiInjectionTest.java:973:145:973:161 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:973:154:973:161 | source(...) : String | Log4jJndiInjectionTest.java:973:145:973:161 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | Log4jJndiInjectionTest.java:974:130:974:146 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | Log4jJndiInjectionTest.java:974:130:974:146 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:974:139:974:146 | source(...) : String | Log4jJndiInjectionTest.java:974:130:974:146 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | Log4jJndiInjectionTest.java:975:115:975:131 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | Log4jJndiInjectionTest.java:975:115:975:131 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:975:124:975:131 | source(...) : String | Log4jJndiInjectionTest.java:975:115:975:131 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | Log4jJndiInjectionTest.java:976:100:976:116 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | Log4jJndiInjectionTest.java:976:100:976:116 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:976:109:976:116 | source(...) : String | Log4jJndiInjectionTest.java:976:100:976:116 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | Log4jJndiInjectionTest.java:977:85:977:101 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | Log4jJndiInjectionTest.java:977:85:977:101 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:977:94:977:101 | source(...) : String | Log4jJndiInjectionTest.java:977:85:977:101 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | Log4jJndiInjectionTest.java:978:70:978:86 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | Log4jJndiInjectionTest.java:978:70:978:86 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:978:79:978:86 | source(...) : String | Log4jJndiInjectionTest.java:978:70:978:86 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | Log4jJndiInjectionTest.java:979:55:979:71 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | Log4jJndiInjectionTest.java:979:55:979:71 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:979:64:979:71 | source(...) : String | Log4jJndiInjectionTest.java:979:55:979:71 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | Log4jJndiInjectionTest.java:980:40:980:56 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | Log4jJndiInjectionTest.java:980:40:980:56 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:980:49:980:56 | source(...) : String | Log4jJndiInjectionTest.java:980:40:980:56 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | Log4jJndiInjectionTest.java:981:25:981:41 | (...)... | provenance | Sink:MaD:2341 | -| Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | Log4jJndiInjectionTest.java:981:25:981:41 | (...)... | provenance | Sink:MaD:48355 | +| Log4jJndiInjectionTest.java:981:34:981:41 | source(...) : String | Log4jJndiInjectionTest.java:981:25:981:41 | (...)... | provenance | Sink:MaD:48361 | | Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | Log4jJndiInjectionTest.java:982:160:982:176 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | Log4jJndiInjectionTest.java:982:160:982:176 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:982:169:982:176 | source(...) : String | Log4jJndiInjectionTest.java:982:160:982:176 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | Log4jJndiInjectionTest.java:983:145:983:161 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | Log4jJndiInjectionTest.java:983:145:983:161 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:983:154:983:161 | source(...) : String | Log4jJndiInjectionTest.java:983:145:983:161 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | Log4jJndiInjectionTest.java:984:130:984:146 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | Log4jJndiInjectionTest.java:984:130:984:146 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:984:139:984:146 | source(...) : String | Log4jJndiInjectionTest.java:984:130:984:146 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | Log4jJndiInjectionTest.java:985:115:985:131 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | Log4jJndiInjectionTest.java:985:115:985:131 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:985:124:985:131 | source(...) : String | Log4jJndiInjectionTest.java:985:115:985:131 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | Log4jJndiInjectionTest.java:986:100:986:116 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | Log4jJndiInjectionTest.java:986:100:986:116 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:986:109:986:116 | source(...) : String | Log4jJndiInjectionTest.java:986:100:986:116 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | Log4jJndiInjectionTest.java:987:85:987:101 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | Log4jJndiInjectionTest.java:987:85:987:101 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:987:94:987:101 | source(...) : String | Log4jJndiInjectionTest.java:987:85:987:101 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | Log4jJndiInjectionTest.java:988:70:988:86 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | Log4jJndiInjectionTest.java:988:70:988:86 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:988:79:988:86 | source(...) : String | Log4jJndiInjectionTest.java:988:70:988:86 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | Log4jJndiInjectionTest.java:989:55:989:71 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | Log4jJndiInjectionTest.java:989:55:989:71 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:989:64:989:71 | source(...) : String | Log4jJndiInjectionTest.java:989:55:989:71 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | Log4jJndiInjectionTest.java:990:40:990:56 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | Log4jJndiInjectionTest.java:990:40:990:56 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:990:49:990:56 | source(...) : String | Log4jJndiInjectionTest.java:990:40:990:56 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | Log4jJndiInjectionTest.java:991:25:991:41 | (...)... | provenance | Sink:MaD:2342 | -| Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | Log4jJndiInjectionTest.java:991:25:991:41 | (...)... | provenance | Sink:MaD:48356 | +| Log4jJndiInjectionTest.java:991:34:991:41 | source(...) : String | Log4jJndiInjectionTest.java:991:25:991:41 | (...)... | provenance | Sink:MaD:48362 | | Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | Log4jJndiInjectionTest.java:992:25:992:41 | (...)... | provenance | Sink:MaD:2334 | -| Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | Log4jJndiInjectionTest.java:992:25:992:41 | (...)... | provenance | Sink:MaD:48348 | +| Log4jJndiInjectionTest.java:992:34:992:41 | source(...) : String | Log4jJndiInjectionTest.java:992:25:992:41 | (...)... | provenance | Sink:MaD:48354 | | Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | Log4jJndiInjectionTest.java:993:40:993:61 | (...)... | provenance | Sink:MaD:2334 | -| Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | Log4jJndiInjectionTest.java:993:40:993:61 | (...)... | provenance | Sink:MaD:48348 | +| Log4jJndiInjectionTest.java:993:54:993:61 | source(...) : String | Log4jJndiInjectionTest.java:993:40:993:61 | (...)... | provenance | Sink:MaD:48354 | | Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | Log4jJndiInjectionTest.java:994:25:994:41 | (...)... | provenance | Sink:MaD:2346 | -| Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | Log4jJndiInjectionTest.java:994:25:994:41 | (...)... | provenance | Sink:MaD:48360 | +| Log4jJndiInjectionTest.java:994:34:994:41 | source(...) : String | Log4jJndiInjectionTest.java:994:25:994:41 | (...)... | provenance | Sink:MaD:48366 | | Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | Log4jJndiInjectionTest.java:995:25:995:46 | (...)... | provenance | Sink:MaD:2347 | -| Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | Log4jJndiInjectionTest.java:995:25:995:46 | (...)... | provenance | Sink:MaD:48361 | +| Log4jJndiInjectionTest.java:995:39:995:46 | source(...) : String | Log4jJndiInjectionTest.java:995:25:995:46 | (...)... | provenance | Sink:MaD:48367 | | Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | Log4jJndiInjectionTest.java:996:25:996:46 | (...)... | provenance | Sink:MaD:2348 | -| Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | Log4jJndiInjectionTest.java:996:25:996:46 | (...)... | provenance | Sink:MaD:48362 | +| Log4jJndiInjectionTest.java:996:39:996:46 | source(...) : String | Log4jJndiInjectionTest.java:996:25:996:46 | (...)... | provenance | Sink:MaD:48368 | | Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | Log4jJndiInjectionTest.java:998:55:998:72 | (...)... | provenance | Sink:MaD:2252 | -| Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | Log4jJndiInjectionTest.java:998:55:998:72 | (...)... | provenance | Sink:MaD:48257 | +| Log4jJndiInjectionTest.java:998:65:998:72 | source(...) : String | Log4jJndiInjectionTest.java:998:55:998:72 | (...)... | provenance | Sink:MaD:48263 | | Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | Log4jJndiInjectionTest.java:999:39:999:55 | (...)... | provenance | Sink:MaD:2253 | -| Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | Log4jJndiInjectionTest.java:999:39:999:55 | (...)... | provenance | Sink:MaD:48258 | +| Log4jJndiInjectionTest.java:999:48:999:55 | source(...) : String | Log4jJndiInjectionTest.java:999:39:999:55 | (...)... | provenance | Sink:MaD:48264 | | Log4jJndiInjectionTest.java:1000:45:1000:67 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1000:45:1000:67 | new Object[] | provenance | Sink:MaD:2253 | -| Log4jJndiInjectionTest.java:1000:45:1000:67 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1000:45:1000:67 | new Object[] | provenance | Sink:MaD:48258 | +| Log4jJndiInjectionTest.java:1000:45:1000:67 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1000:45:1000:67 | new Object[] | provenance | Sink:MaD:48264 | | Log4jJndiInjectionTest.java:1000:59:1000:66 | source(...) : String | Log4jJndiInjectionTest.java:1000:45:1000:67 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | Log4jJndiInjectionTest.java:1001:33:1001:49 | (...)... | provenance | Sink:MaD:2254 | -| Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | Log4jJndiInjectionTest.java:1001:33:1001:49 | (...)... | provenance | Sink:MaD:48259 | +| Log4jJndiInjectionTest.java:1001:42:1001:49 | source(...) : String | Log4jJndiInjectionTest.java:1001:33:1001:49 | (...)... | provenance | Sink:MaD:48265 | | Log4jJndiInjectionTest.java:1002:39:1002:61 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1002:39:1002:61 | new Object[] | provenance | Sink:MaD:2254 | -| Log4jJndiInjectionTest.java:1002:39:1002:61 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1002:39:1002:61 | new Object[] | provenance | Sink:MaD:48259 | +| Log4jJndiInjectionTest.java:1002:39:1002:61 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1002:39:1002:61 | new Object[] | provenance | Sink:MaD:48265 | | Log4jJndiInjectionTest.java:1002:53:1002:60 | source(...) : String | Log4jJndiInjectionTest.java:1002:39:1002:61 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | Log4jJndiInjectionTest.java:1020:25:1020:47 | (...)... | provenance | Sink:MaD:1999 | -| Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | Log4jJndiInjectionTest.java:1020:25:1020:47 | (...)... | provenance | Sink:MaD:48004 | +| Log4jJndiInjectionTest.java:1020:40:1020:47 | source(...) : String | Log4jJndiInjectionTest.java:1020:25:1020:47 | (...)... | provenance | Sink:MaD:48010 | | Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | Log4jJndiInjectionTest.java:1021:25:1021:42 | (...)... | provenance | Sink:MaD:2000 | -| Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | Log4jJndiInjectionTest.java:1021:25:1021:42 | (...)... | provenance | Sink:MaD:48005 | +| Log4jJndiInjectionTest.java:1021:35:1021:42 | source(...) : String | Log4jJndiInjectionTest.java:1021:25:1021:42 | (...)... | provenance | Sink:MaD:48011 | | Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | Log4jJndiInjectionTest.java:1023:25:1023:41 | (...)... | provenance | Sink:MaD:2002 | -| Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | Log4jJndiInjectionTest.java:1023:25:1023:41 | (...)... | provenance | Sink:MaD:48007 | +| Log4jJndiInjectionTest.java:1023:34:1023:41 | source(...) : String | Log4jJndiInjectionTest.java:1023:25:1023:41 | (...)... | provenance | Sink:MaD:48013 | | Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | Log4jJndiInjectionTest.java:1024:25:1024:41 | (...)... | provenance | Sink:MaD:2013 | -| Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | Log4jJndiInjectionTest.java:1024:25:1024:41 | (...)... | provenance | Sink:MaD:48018 | +| Log4jJndiInjectionTest.java:1024:34:1024:41 | source(...) : String | Log4jJndiInjectionTest.java:1024:25:1024:41 | (...)... | provenance | Sink:MaD:48024 | | Log4jJndiInjectionTest.java:1025:40:1025:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1025:40:1025:62 | new Object[] | provenance | Sink:MaD:2013 | -| Log4jJndiInjectionTest.java:1025:40:1025:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1025:40:1025:62 | new Object[] | provenance | Sink:MaD:48018 | +| Log4jJndiInjectionTest.java:1025:40:1025:62 | {...} : Object[] [[]] : String | Log4jJndiInjectionTest.java:1025:40:1025:62 | new Object[] | provenance | Sink:MaD:48024 | | Log4jJndiInjectionTest.java:1025:54:1025:61 | source(...) : String | Log4jJndiInjectionTest.java:1025:40:1025:62 | {...} : Object[] [[]] : String | provenance | | | Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | Log4jJndiInjectionTest.java:1028:40:1028:56 | (...)... | provenance | Sink:MaD:2003 | -| Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | Log4jJndiInjectionTest.java:1028:40:1028:56 | (...)... | provenance | Sink:MaD:48008 | +| Log4jJndiInjectionTest.java:1028:49:1028:56 | source(...) : String | Log4jJndiInjectionTest.java:1028:40:1028:56 | (...)... | provenance | Sink:MaD:48014 | | Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | Log4jJndiInjectionTest.java:1029:25:1029:41 | (...)... | provenance | Sink:MaD:2003 | -| Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | Log4jJndiInjectionTest.java:1029:25:1029:41 | (...)... | provenance | Sink:MaD:48008 | +| Log4jJndiInjectionTest.java:1029:34:1029:41 | source(...) : String | Log4jJndiInjectionTest.java:1029:25:1029:41 | (...)... | provenance | Sink:MaD:48014 | | Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | Log4jJndiInjectionTest.java:1030:55:1030:71 | (...)... | provenance | Sink:MaD:2004 | -| Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | Log4jJndiInjectionTest.java:1030:55:1030:71 | (...)... | provenance | Sink:MaD:48009 | +| Log4jJndiInjectionTest.java:1030:64:1030:71 | source(...) : String | Log4jJndiInjectionTest.java:1030:55:1030:71 | (...)... | provenance | Sink:MaD:48015 | | Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | Log4jJndiInjectionTest.java:1031:40:1031:56 | (...)... | provenance | Sink:MaD:2004 | -| Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | Log4jJndiInjectionTest.java:1031:40:1031:56 | (...)... | provenance | Sink:MaD:48009 | +| Log4jJndiInjectionTest.java:1031:49:1031:56 | source(...) : String | Log4jJndiInjectionTest.java:1031:40:1031:56 | (...)... | provenance | Sink:MaD:48015 | | Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | Log4jJndiInjectionTest.java:1032:25:1032:41 | (...)... | provenance | Sink:MaD:2004 | -| Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | Log4jJndiInjectionTest.java:1032:25:1032:41 | (...)... | provenance | Sink:MaD:48009 | +| Log4jJndiInjectionTest.java:1032:34:1032:41 | source(...) : String | Log4jJndiInjectionTest.java:1032:25:1032:41 | (...)... | provenance | Sink:MaD:48015 | | Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | Log4jJndiInjectionTest.java:1033:70:1033:86 | (...)... | provenance | Sink:MaD:2005 | -| Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | Log4jJndiInjectionTest.java:1033:70:1033:86 | (...)... | provenance | Sink:MaD:48010 | +| Log4jJndiInjectionTest.java:1033:79:1033:86 | source(...) : String | Log4jJndiInjectionTest.java:1033:70:1033:86 | (...)... | provenance | Sink:MaD:48016 | | Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | Log4jJndiInjectionTest.java:1034:55:1034:71 | (...)... | provenance | Sink:MaD:2005 | -| Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | Log4jJndiInjectionTest.java:1034:55:1034:71 | (...)... | provenance | Sink:MaD:48010 | +| Log4jJndiInjectionTest.java:1034:64:1034:71 | source(...) : String | Log4jJndiInjectionTest.java:1034:55:1034:71 | (...)... | provenance | Sink:MaD:48016 | | Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | Log4jJndiInjectionTest.java:1035:40:1035:56 | (...)... | provenance | Sink:MaD:2005 | -| Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | Log4jJndiInjectionTest.java:1035:40:1035:56 | (...)... | provenance | Sink:MaD:48010 | +| Log4jJndiInjectionTest.java:1035:49:1035:56 | source(...) : String | Log4jJndiInjectionTest.java:1035:40:1035:56 | (...)... | provenance | Sink:MaD:48016 | | Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | Log4jJndiInjectionTest.java:1036:25:1036:41 | (...)... | provenance | Sink:MaD:2005 | -| Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | Log4jJndiInjectionTest.java:1036:25:1036:41 | (...)... | provenance | Sink:MaD:48010 | +| Log4jJndiInjectionTest.java:1036:34:1036:41 | source(...) : String | Log4jJndiInjectionTest.java:1036:25:1036:41 | (...)... | provenance | Sink:MaD:48016 | | Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | Log4jJndiInjectionTest.java:1037:85:1037:101 | (...)... | provenance | Sink:MaD:2006 | -| Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | Log4jJndiInjectionTest.java:1037:85:1037:101 | (...)... | provenance | Sink:MaD:48011 | +| Log4jJndiInjectionTest.java:1037:94:1037:101 | source(...) : String | Log4jJndiInjectionTest.java:1037:85:1037:101 | (...)... | provenance | Sink:MaD:48017 | | Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | Log4jJndiInjectionTest.java:1038:70:1038:86 | (...)... | provenance | Sink:MaD:2006 | -| Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | Log4jJndiInjectionTest.java:1038:70:1038:86 | (...)... | provenance | Sink:MaD:48011 | +| Log4jJndiInjectionTest.java:1038:79:1038:86 | source(...) : String | Log4jJndiInjectionTest.java:1038:70:1038:86 | (...)... | provenance | Sink:MaD:48017 | | Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | Log4jJndiInjectionTest.java:1039:55:1039:71 | (...)... | provenance | Sink:MaD:2006 | -| Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | Log4jJndiInjectionTest.java:1039:55:1039:71 | (...)... | provenance | Sink:MaD:48011 | +| Log4jJndiInjectionTest.java:1039:64:1039:71 | source(...) : String | Log4jJndiInjectionTest.java:1039:55:1039:71 | (...)... | provenance | Sink:MaD:48017 | | Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | Log4jJndiInjectionTest.java:1040:40:1040:56 | (...)... | provenance | Sink:MaD:2006 | -| Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | Log4jJndiInjectionTest.java:1040:40:1040:56 | (...)... | provenance | Sink:MaD:48011 | +| Log4jJndiInjectionTest.java:1040:49:1040:56 | source(...) : String | Log4jJndiInjectionTest.java:1040:40:1040:56 | (...)... | provenance | Sink:MaD:48017 | | Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | Log4jJndiInjectionTest.java:1041:25:1041:41 | (...)... | provenance | Sink:MaD:2006 | -| Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | Log4jJndiInjectionTest.java:1041:25:1041:41 | (...)... | provenance | Sink:MaD:48011 | +| Log4jJndiInjectionTest.java:1041:34:1041:41 | source(...) : String | Log4jJndiInjectionTest.java:1041:25:1041:41 | (...)... | provenance | Sink:MaD:48017 | | Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | Log4jJndiInjectionTest.java:1042:100:1042:116 | (...)... | provenance | Sink:MaD:2007 | -| Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | Log4jJndiInjectionTest.java:1042:100:1042:116 | (...)... | provenance | Sink:MaD:48012 | +| Log4jJndiInjectionTest.java:1042:109:1042:116 | source(...) : String | Log4jJndiInjectionTest.java:1042:100:1042:116 | (...)... | provenance | Sink:MaD:48018 | | Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | Log4jJndiInjectionTest.java:1043:85:1043:101 | (...)... | provenance | Sink:MaD:2007 | -| Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | Log4jJndiInjectionTest.java:1043:85:1043:101 | (...)... | provenance | Sink:MaD:48012 | +| Log4jJndiInjectionTest.java:1043:94:1043:101 | source(...) : String | Log4jJndiInjectionTest.java:1043:85:1043:101 | (...)... | provenance | Sink:MaD:48018 | | Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | Log4jJndiInjectionTest.java:1044:70:1044:86 | (...)... | provenance | Sink:MaD:2007 | -| Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | Log4jJndiInjectionTest.java:1044:70:1044:86 | (...)... | provenance | Sink:MaD:48012 | +| Log4jJndiInjectionTest.java:1044:79:1044:86 | source(...) : String | Log4jJndiInjectionTest.java:1044:70:1044:86 | (...)... | provenance | Sink:MaD:48018 | | Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | Log4jJndiInjectionTest.java:1045:55:1045:71 | (...)... | provenance | Sink:MaD:2007 | -| Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | Log4jJndiInjectionTest.java:1045:55:1045:71 | (...)... | provenance | Sink:MaD:48012 | +| Log4jJndiInjectionTest.java:1045:64:1045:71 | source(...) : String | Log4jJndiInjectionTest.java:1045:55:1045:71 | (...)... | provenance | Sink:MaD:48018 | | Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | Log4jJndiInjectionTest.java:1046:40:1046:56 | (...)... | provenance | Sink:MaD:2007 | -| Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | Log4jJndiInjectionTest.java:1046:40:1046:56 | (...)... | provenance | Sink:MaD:48012 | +| Log4jJndiInjectionTest.java:1046:49:1046:56 | source(...) : String | Log4jJndiInjectionTest.java:1046:40:1046:56 | (...)... | provenance | Sink:MaD:48018 | | Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | Log4jJndiInjectionTest.java:1047:25:1047:41 | (...)... | provenance | Sink:MaD:2007 | -| Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | Log4jJndiInjectionTest.java:1047:25:1047:41 | (...)... | provenance | Sink:MaD:48012 | +| Log4jJndiInjectionTest.java:1047:34:1047:41 | source(...) : String | Log4jJndiInjectionTest.java:1047:25:1047:41 | (...)... | provenance | Sink:MaD:48018 | | Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | Log4jJndiInjectionTest.java:1048:115:1048:131 | (...)... | provenance | Sink:MaD:2008 | -| Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | Log4jJndiInjectionTest.java:1048:115:1048:131 | (...)... | provenance | Sink:MaD:48013 | +| Log4jJndiInjectionTest.java:1048:124:1048:131 | source(...) : String | Log4jJndiInjectionTest.java:1048:115:1048:131 | (...)... | provenance | Sink:MaD:48019 | | Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | Log4jJndiInjectionTest.java:1049:100:1049:116 | (...)... | provenance | Sink:MaD:2008 | -| Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | Log4jJndiInjectionTest.java:1049:100:1049:116 | (...)... | provenance | Sink:MaD:48013 | +| Log4jJndiInjectionTest.java:1049:109:1049:116 | source(...) : String | Log4jJndiInjectionTest.java:1049:100:1049:116 | (...)... | provenance | Sink:MaD:48019 | | Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | Log4jJndiInjectionTest.java:1050:85:1050:101 | (...)... | provenance | Sink:MaD:2008 | -| Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | Log4jJndiInjectionTest.java:1050:85:1050:101 | (...)... | provenance | Sink:MaD:48013 | +| Log4jJndiInjectionTest.java:1050:94:1050:101 | source(...) : String | Log4jJndiInjectionTest.java:1050:85:1050:101 | (...)... | provenance | Sink:MaD:48019 | | Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | Log4jJndiInjectionTest.java:1051:70:1051:86 | (...)... | provenance | Sink:MaD:2008 | -| Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | Log4jJndiInjectionTest.java:1051:70:1051:86 | (...)... | provenance | Sink:MaD:48013 | +| Log4jJndiInjectionTest.java:1051:79:1051:86 | source(...) : String | Log4jJndiInjectionTest.java:1051:70:1051:86 | (...)... | provenance | Sink:MaD:48019 | | Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | Log4jJndiInjectionTest.java:1052:55:1052:71 | (...)... | provenance | Sink:MaD:2008 | -| Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | Log4jJndiInjectionTest.java:1052:55:1052:71 | (...)... | provenance | Sink:MaD:48013 | +| Log4jJndiInjectionTest.java:1052:64:1052:71 | source(...) : String | Log4jJndiInjectionTest.java:1052:55:1052:71 | (...)... | provenance | Sink:MaD:48019 | | Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | Log4jJndiInjectionTest.java:1053:40:1053:56 | (...)... | provenance | Sink:MaD:2008 | -| Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | Log4jJndiInjectionTest.java:1053:40:1053:56 | (...)... | provenance | Sink:MaD:48013 | +| Log4jJndiInjectionTest.java:1053:49:1053:56 | source(...) : String | Log4jJndiInjectionTest.java:1053:40:1053:56 | (...)... | provenance | Sink:MaD:48019 | | Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | Log4jJndiInjectionTest.java:1054:25:1054:41 | (...)... | provenance | Sink:MaD:2008 | -| Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | Log4jJndiInjectionTest.java:1054:25:1054:41 | (...)... | provenance | Sink:MaD:48013 | +| Log4jJndiInjectionTest.java:1054:34:1054:41 | source(...) : String | Log4jJndiInjectionTest.java:1054:25:1054:41 | (...)... | provenance | Sink:MaD:48019 | | Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | Log4jJndiInjectionTest.java:1055:130:1055:146 | (...)... | provenance | Sink:MaD:2009 | -| Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | Log4jJndiInjectionTest.java:1055:130:1055:146 | (...)... | provenance | Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:1055:139:1055:146 | source(...) : String | Log4jJndiInjectionTest.java:1055:130:1055:146 | (...)... | provenance | Sink:MaD:48020 | | Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | Log4jJndiInjectionTest.java:1056:115:1056:131 | (...)... | provenance | Sink:MaD:2009 | -| Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | Log4jJndiInjectionTest.java:1056:115:1056:131 | (...)... | provenance | Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:1056:124:1056:131 | source(...) : String | Log4jJndiInjectionTest.java:1056:115:1056:131 | (...)... | provenance | Sink:MaD:48020 | | Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | Log4jJndiInjectionTest.java:1057:100:1057:116 | (...)... | provenance | Sink:MaD:2009 | -| Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | Log4jJndiInjectionTest.java:1057:100:1057:116 | (...)... | provenance | Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:1057:109:1057:116 | source(...) : String | Log4jJndiInjectionTest.java:1057:100:1057:116 | (...)... | provenance | Sink:MaD:48020 | | Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | Log4jJndiInjectionTest.java:1058:85:1058:101 | (...)... | provenance | Sink:MaD:2009 | -| Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | Log4jJndiInjectionTest.java:1058:85:1058:101 | (...)... | provenance | Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:1058:94:1058:101 | source(...) : String | Log4jJndiInjectionTest.java:1058:85:1058:101 | (...)... | provenance | Sink:MaD:48020 | | Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | Log4jJndiInjectionTest.java:1059:70:1059:86 | (...)... | provenance | Sink:MaD:2009 | -| Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | Log4jJndiInjectionTest.java:1059:70:1059:86 | (...)... | provenance | Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:1059:79:1059:86 | source(...) : String | Log4jJndiInjectionTest.java:1059:70:1059:86 | (...)... | provenance | Sink:MaD:48020 | | Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | Log4jJndiInjectionTest.java:1060:55:1060:71 | (...)... | provenance | Sink:MaD:2009 | -| Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | Log4jJndiInjectionTest.java:1060:55:1060:71 | (...)... | provenance | Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:1060:64:1060:71 | source(...) : String | Log4jJndiInjectionTest.java:1060:55:1060:71 | (...)... | provenance | Sink:MaD:48020 | | Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | Log4jJndiInjectionTest.java:1061:40:1061:56 | (...)... | provenance | Sink:MaD:2009 | -| Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | Log4jJndiInjectionTest.java:1061:40:1061:56 | (...)... | provenance | Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:1061:49:1061:56 | source(...) : String | Log4jJndiInjectionTest.java:1061:40:1061:56 | (...)... | provenance | Sink:MaD:48020 | | Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | Log4jJndiInjectionTest.java:1062:25:1062:41 | (...)... | provenance | Sink:MaD:2009 | -| Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | Log4jJndiInjectionTest.java:1062:25:1062:41 | (...)... | provenance | Sink:MaD:48014 | +| Log4jJndiInjectionTest.java:1062:34:1062:41 | source(...) : String | Log4jJndiInjectionTest.java:1062:25:1062:41 | (...)... | provenance | Sink:MaD:48020 | | Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | Log4jJndiInjectionTest.java:1063:145:1063:161 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | Log4jJndiInjectionTest.java:1063:145:1063:161 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1063:154:1063:161 | source(...) : String | Log4jJndiInjectionTest.java:1063:145:1063:161 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | Log4jJndiInjectionTest.java:1064:130:1064:146 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | Log4jJndiInjectionTest.java:1064:130:1064:146 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1064:139:1064:146 | source(...) : String | Log4jJndiInjectionTest.java:1064:130:1064:146 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | Log4jJndiInjectionTest.java:1065:115:1065:131 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | Log4jJndiInjectionTest.java:1065:115:1065:131 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1065:124:1065:131 | source(...) : String | Log4jJndiInjectionTest.java:1065:115:1065:131 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | Log4jJndiInjectionTest.java:1066:100:1066:116 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | Log4jJndiInjectionTest.java:1066:100:1066:116 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1066:109:1066:116 | source(...) : String | Log4jJndiInjectionTest.java:1066:100:1066:116 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | Log4jJndiInjectionTest.java:1067:85:1067:101 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | Log4jJndiInjectionTest.java:1067:85:1067:101 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1067:94:1067:101 | source(...) : String | Log4jJndiInjectionTest.java:1067:85:1067:101 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | Log4jJndiInjectionTest.java:1068:70:1068:86 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | Log4jJndiInjectionTest.java:1068:70:1068:86 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1068:79:1068:86 | source(...) : String | Log4jJndiInjectionTest.java:1068:70:1068:86 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | Log4jJndiInjectionTest.java:1069:55:1069:71 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | Log4jJndiInjectionTest.java:1069:55:1069:71 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1069:64:1069:71 | source(...) : String | Log4jJndiInjectionTest.java:1069:55:1069:71 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | Log4jJndiInjectionTest.java:1070:40:1070:56 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | Log4jJndiInjectionTest.java:1070:40:1070:56 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1070:49:1070:56 | source(...) : String | Log4jJndiInjectionTest.java:1070:40:1070:56 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | Log4jJndiInjectionTest.java:1071:25:1071:41 | (...)... | provenance | Sink:MaD:2010 | -| Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | Log4jJndiInjectionTest.java:1071:25:1071:41 | (...)... | provenance | Sink:MaD:48015 | +| Log4jJndiInjectionTest.java:1071:34:1071:41 | source(...) : String | Log4jJndiInjectionTest.java:1071:25:1071:41 | (...)... | provenance | Sink:MaD:48021 | | Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | Log4jJndiInjectionTest.java:1072:160:1072:176 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | Log4jJndiInjectionTest.java:1072:160:1072:176 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1072:169:1072:176 | source(...) : String | Log4jJndiInjectionTest.java:1072:160:1072:176 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | Log4jJndiInjectionTest.java:1073:145:1073:161 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | Log4jJndiInjectionTest.java:1073:145:1073:161 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1073:154:1073:161 | source(...) : String | Log4jJndiInjectionTest.java:1073:145:1073:161 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | Log4jJndiInjectionTest.java:1074:130:1074:146 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | Log4jJndiInjectionTest.java:1074:130:1074:146 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1074:139:1074:146 | source(...) : String | Log4jJndiInjectionTest.java:1074:130:1074:146 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | Log4jJndiInjectionTest.java:1075:115:1075:131 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | Log4jJndiInjectionTest.java:1075:115:1075:131 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1075:124:1075:131 | source(...) : String | Log4jJndiInjectionTest.java:1075:115:1075:131 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | Log4jJndiInjectionTest.java:1076:100:1076:116 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | Log4jJndiInjectionTest.java:1076:100:1076:116 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1076:109:1076:116 | source(...) : String | Log4jJndiInjectionTest.java:1076:100:1076:116 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | Log4jJndiInjectionTest.java:1077:85:1077:101 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | Log4jJndiInjectionTest.java:1077:85:1077:101 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1077:94:1077:101 | source(...) : String | Log4jJndiInjectionTest.java:1077:85:1077:101 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | Log4jJndiInjectionTest.java:1078:70:1078:86 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | Log4jJndiInjectionTest.java:1078:70:1078:86 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1078:79:1078:86 | source(...) : String | Log4jJndiInjectionTest.java:1078:70:1078:86 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | Log4jJndiInjectionTest.java:1079:55:1079:71 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | Log4jJndiInjectionTest.java:1079:55:1079:71 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1079:64:1079:71 | source(...) : String | Log4jJndiInjectionTest.java:1079:55:1079:71 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | Log4jJndiInjectionTest.java:1080:40:1080:56 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | Log4jJndiInjectionTest.java:1080:40:1080:56 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1080:49:1080:56 | source(...) : String | Log4jJndiInjectionTest.java:1080:40:1080:56 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | Log4jJndiInjectionTest.java:1081:25:1081:41 | (...)... | provenance | Sink:MaD:2011 | -| Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | Log4jJndiInjectionTest.java:1081:25:1081:41 | (...)... | provenance | Sink:MaD:48016 | +| Log4jJndiInjectionTest.java:1081:34:1081:41 | source(...) : String | Log4jJndiInjectionTest.java:1081:25:1081:41 | (...)... | provenance | Sink:MaD:48022 | | Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | Log4jJndiInjectionTest.java:1083:25:1083:41 | (...)... | provenance | Sink:MaD:2003 | -| Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | Log4jJndiInjectionTest.java:1083:25:1083:41 | (...)... | provenance | Sink:MaD:48008 | +| Log4jJndiInjectionTest.java:1083:34:1083:41 | source(...) : String | Log4jJndiInjectionTest.java:1083:25:1083:41 | (...)... | provenance | Sink:MaD:48014 | | Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | Log4jJndiInjectionTest.java:1084:40:1084:61 | (...)... | provenance | Sink:MaD:2003 | -| Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | Log4jJndiInjectionTest.java:1084:40:1084:61 | (...)... | provenance | Sink:MaD:48008 | +| Log4jJndiInjectionTest.java:1084:54:1084:61 | source(...) : String | Log4jJndiInjectionTest.java:1084:40:1084:61 | (...)... | provenance | Sink:MaD:48014 | | Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | Log4jJndiInjectionTest.java:1085:25:1085:46 | (...)... | provenance | Sink:MaD:2001 | -| Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | Log4jJndiInjectionTest.java:1085:25:1085:46 | (...)... | provenance | Sink:MaD:48006 | +| Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | Log4jJndiInjectionTest.java:1085:25:1085:46 | (...)... | provenance | Sink:MaD:48012 | | Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | Log4jJndiInjectionTest.java:1088:38:1088:54 | (...)... | provenance | Sink:MaD:2349 | | Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | Log4jJndiInjectionTest.java:1089:44:1089:60 | (...)... | provenance | Sink:MaD:2351 | | Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1092:34:1092:36 | map | provenance | Sink:MaD:2350 | -| Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | provenance | MaD:43913 | +| Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | provenance | MaD:43911 | | Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | provenance | | | Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | Log4jJndiInjectionTest.java:1096:26:1096:29 | mmsg | provenance | Sink:MaD:2089 | -| Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | Log4jJndiInjectionTest.java:1096:26:1096:29 | mmsg | provenance | Sink:MaD:48094 | +| Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | Log4jJndiInjectionTest.java:1096:26:1096:29 | mmsg | provenance | Sink:MaD:48100 | | Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | provenance | MaD:1994+MaD:1993 | | Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | provenance | | | Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1101:26:1101:29 | mmsg | provenance | Sink:MaD:2089 | -| Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1101:26:1101:29 | mmsg | provenance | Sink:MaD:48094 | +| Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1101:26:1101:29 | mmsg | provenance | Sink:MaD:48100 | | Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | provenance | MaD:1994 | | Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | provenance | | | Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1106:26:1106:29 | mmsg | provenance | Sink:MaD:2089 | -| Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1106:26:1106:29 | mmsg | provenance | Sink:MaD:48094 | +| Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1106:26:1106:29 | mmsg | provenance | Sink:MaD:48100 | | Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | provenance | MaD:1991 | | Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | provenance | | | Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | provenance | | -| Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | provenance | MaD:43913 | +| Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | provenance | MaD:43911 | | Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | provenance | | | Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1113:26:1113:29 | mmsg | provenance | Sink:MaD:2089 | -| Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1113:26:1113:29 | mmsg | provenance | Sink:MaD:48094 | +| Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1113:26:1113:29 | mmsg | provenance | Sink:MaD:48100 | | Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | provenance | MaD:1992 | | Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | Log4jJndiInjectionTest.java:1116:52:1116:68 | (...)... | provenance | Sink:MaD:1995 | | Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | Log4jJndiInjectionTest.java:1117:72:1117:88 | (...)... | provenance | Sink:MaD:1997 | | Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1120:43:1120:45 | map | provenance | Sink:MaD:1996 | | Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1121:63:1121:65 | map | provenance | Sink:MaD:1998 | -| Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | provenance | MaD:43913 | +| Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | provenance | MaD:43911 | | Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | provenance | | nodes | Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | semmle.label | getParameter(...) : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected index cd6a7bfeca92..51d7f83e0a55 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected @@ -1,12 +1,12 @@ edges -| FilePathInjection.java:21:21:21:34 | getPara(...) : String | FilePathInjection.java:26:47:26:59 | finalFilePath | provenance | Src:MaD:1972 Sink:MaD:42556 | -| FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | provenance | Src:MaD:1972 AdditionalValueStep Sink:MaD:42556 | -| FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | provenance | Src:MaD:1972 AdditionalValueStep Sink:MaD:42556 | -| FilePathInjection.java:177:50:177:58 | file : File | FilePathInjection.java:182:30:182:33 | file | provenance | Sink:MaD:42553 | -| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath : String | provenance | Src:MaD:44686 | -| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:210:23:210:26 | file | provenance | Sink:MaD:42540 | +| FilePathInjection.java:21:21:21:34 | getPara(...) : String | FilePathInjection.java:26:47:26:59 | finalFilePath | provenance | Src:MaD:1972 Sink:MaD:42557 | +| FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | provenance | Src:MaD:1972 AdditionalValueStep Sink:MaD:42557 | +| FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | provenance | Src:MaD:1972 AdditionalValueStep Sink:MaD:42557 | +| FilePathInjection.java:177:50:177:58 | file : File | FilePathInjection.java:182:30:182:33 | file | provenance | Sink:MaD:42554 | +| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath : String | provenance | Src:MaD:44684 | +| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:210:23:210:26 | file | provenance | Sink:MaD:42541 | | FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:217:19:217:22 | file : File | provenance | | -| FilePathInjection.java:209:24:209:31 | filePath : String | FilePathInjection.java:209:15:209:32 | new File(...) : File | provenance | MaD:42612 | +| FilePathInjection.java:209:24:209:31 | filePath : String | FilePathInjection.java:209:15:209:32 | new File(...) : File | provenance | MaD:42613 | | FilePathInjection.java:217:19:217:22 | file : File | FilePathInjection.java:177:50:177:58 | file : File | provenance | | nodes | FilePathInjection.java:21:21:21:34 | getPara(...) : String | semmle.label | getPara(...) : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-078/CommandInjectionRuntimeExecLocal.expected b/java/ql/test/experimental/query-tests/security/CWE-078/CommandInjectionRuntimeExecLocal.expected index 1e1ffdedba5b..923f9fba9e9f 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-078/CommandInjectionRuntimeExecLocal.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-078/CommandInjectionRuntimeExecLocal.expected @@ -1,18 +1,18 @@ edges -| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:22:67:22:72 | script : String | provenance | Src:MaD:42706 | -| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:25:66:25:71 | script : String | provenance | Src:MaD:42706 | -| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:31:36:31:41 | script : String | provenance | Src:MaD:42706 | -| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:38:52:38:57 | script : String | provenance | Src:MaD:42706 | -| RuntimeExecTest.java:22:43:22:73 | {...} : String[] [[]] : String | RuntimeExecTest.java:22:43:22:73 | new String[] | provenance | Sink:MaD:42685 | +| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:22:67:22:72 | script : String | provenance | Src:MaD:42707 | +| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:25:66:25:71 | script : String | provenance | Src:MaD:42707 | +| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:31:36:31:41 | script : String | provenance | Src:MaD:42707 | +| RuntimeExecTest.java:17:25:17:51 | getenv(...) : String | RuntimeExecTest.java:38:52:38:57 | script : String | provenance | Src:MaD:42707 | +| RuntimeExecTest.java:22:43:22:73 | {...} : String[] [[]] : String | RuntimeExecTest.java:22:43:22:73 | new String[] | provenance | Sink:MaD:42686 | | RuntimeExecTest.java:22:67:22:72 | script : String | RuntimeExecTest.java:22:43:22:73 | {...} : String[] [[]] : String | provenance | | -| RuntimeExecTest.java:25:42:25:72 | {...} : String[] [[]] : String | RuntimeExecTest.java:26:43:26:55 | commandArray1 | provenance | Sink:MaD:42685 | +| RuntimeExecTest.java:25:42:25:72 | {...} : String[] [[]] : String | RuntimeExecTest.java:26:43:26:55 | commandArray1 | provenance | Sink:MaD:42686 | | RuntimeExecTest.java:25:66:25:71 | script : String | RuntimeExecTest.java:25:42:25:72 | {...} : String[] [[]] : String | provenance | | -| RuntimeExecTest.java:31:17:31:29 | commandArray2 [post update] : String[] [[]] : String | RuntimeExecTest.java:32:43:32:55 | commandArray2 | provenance | Sink:MaD:42685 | +| RuntimeExecTest.java:31:17:31:29 | commandArray2 [post update] : String[] [[]] : String | RuntimeExecTest.java:32:43:32:55 | commandArray2 | provenance | Sink:MaD:42686 | | RuntimeExecTest.java:31:36:31:41 | script : String | RuntimeExecTest.java:31:17:31:29 | commandArray2 [post update] : String[] [[]] : String | provenance | | -| RuntimeExecTest.java:36:21:39:21 | concat(...) : Stream [] : String | RuntimeExecTest.java:36:21:39:44 | toArray(...) : String[] [[]] : String | provenance | MaD:44368 | -| RuntimeExecTest.java:36:21:39:44 | toArray(...) : String[] [[]] : String | RuntimeExecTest.java:36:21:39:44 | toArray(...) | provenance | Sink:MaD:42685 | -| RuntimeExecTest.java:38:25:38:59 | stream(...) : Stream [] : String | RuntimeExecTest.java:36:21:39:21 | concat(...) : Stream [] : String | provenance | MaD:44303 | -| RuntimeExecTest.java:38:39:38:58 | new String[] : String[] [[]] : String | RuntimeExecTest.java:38:25:38:59 | stream(...) : Stream [] : String | provenance | MaD:43737 | +| RuntimeExecTest.java:36:21:39:21 | concat(...) : Stream [] : String | RuntimeExecTest.java:36:21:39:44 | toArray(...) : String[] [[]] : String | provenance | MaD:44366 | +| RuntimeExecTest.java:36:21:39:44 | toArray(...) : String[] [[]] : String | RuntimeExecTest.java:36:21:39:44 | toArray(...) | provenance | Sink:MaD:42686 | +| RuntimeExecTest.java:38:25:38:59 | stream(...) : Stream [] : String | RuntimeExecTest.java:36:21:39:21 | concat(...) : Stream [] : String | provenance | MaD:44301 | +| RuntimeExecTest.java:38:39:38:58 | new String[] : String[] [[]] : String | RuntimeExecTest.java:38:25:38:59 | stream(...) : Stream [] : String | provenance | MaD:43735 | | RuntimeExecTest.java:38:39:38:58 | {...} : String[] [[]] : String | RuntimeExecTest.java:38:39:38:58 | new String[] : String[] [[]] : String | provenance | | | RuntimeExecTest.java:38:52:38:57 | script : String | RuntimeExecTest.java:38:39:38:58 | {...} : String[] [[]] : String | provenance | | nodes diff --git a/java/ql/test/experimental/query-tests/security/CWE-078/ExecTainted.expected b/java/ql/test/experimental/query-tests/security/CWE-078/ExecTainted.expected index 1de9154e2f3e..7154cb4c6b0b 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-078/ExecTainted.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-078/ExecTainted.expected @@ -1,6 +1,6 @@ edges -| JSchOSInjectionTest.java:14:30:14:60 | getParameter(...) : String | JSchOSInjectionTest.java:27:52:27:68 | ... + ... | provenance | Src:MaD:44686 Sink:MaD:1957 | -| JSchOSInjectionTest.java:40:30:40:60 | getParameter(...) : String | JSchOSInjectionTest.java:53:36:53:52 | ... + ... | provenance | Src:MaD:44686 Sink:MaD:1957 | +| JSchOSInjectionTest.java:14:30:14:60 | getParameter(...) : String | JSchOSInjectionTest.java:27:52:27:68 | ... + ... | provenance | Src:MaD:44684 Sink:MaD:1957 | +| JSchOSInjectionTest.java:40:30:40:60 | getParameter(...) : String | JSchOSInjectionTest.java:53:36:53:52 | ... + ... | provenance | Src:MaD:44684 Sink:MaD:1957 | nodes | JSchOSInjectionTest.java:14:30:14:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JSchOSInjectionTest.java:27:52:27:68 | ... + ... | semmle.label | ... + ... | diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected index bf27b68276a3..b43cc970e630 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected @@ -11,7 +11,7 @@ edges | MybatisSqlInjection.java:110:40:110:43 | name : String | MybatisSqlInjectionService.java:88:32:88:42 | name : String | provenance | | | MybatisSqlInjectionService.java:48:19:48:29 | name : String | MybatisSqlInjectionService.java:50:23:50:26 | name : String | provenance | | | MybatisSqlInjectionService.java:50:3:50:9 | hashMap [post update] : HashMap [] : String | MybatisSqlInjectionService.java:51:27:51:33 | hashMap | provenance | | -| MybatisSqlInjectionService.java:50:23:50:26 | name : String | MybatisSqlInjectionService.java:50:3:50:9 | hashMap [post update] : HashMap [] : String | provenance | MaD:43913 | +| MybatisSqlInjectionService.java:50:23:50:26 | name : String | MybatisSqlInjectionService.java:50:3:50:9 | hashMap [post update] : HashMap [] : String | provenance | MaD:43911 | | MybatisSqlInjectionService.java:54:32:54:42 | name : String | MybatisSqlInjectionService.java:55:32:55:35 | name | provenance | | | MybatisSqlInjectionService.java:80:20:80:30 | name : String | MybatisSqlInjectionService.java:81:28:81:31 | name | provenance | | | MybatisSqlInjectionService.java:84:20:84:29 | age : String | MybatisSqlInjectionService.java:85:28:85:30 | age | provenance | | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/BeanShellInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/BeanShellInjection.expected index 33fce87bddd3..b2b17f1d335f 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/BeanShellInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/BeanShellInjection.expected @@ -1,8 +1,8 @@ edges -| BeanShellInjection.java:13:17:13:44 | getParameter(...) : String | BeanShellInjection.java:15:45:15:48 | code : String | provenance | Src:MaD:44686 | +| BeanShellInjection.java:13:17:13:44 | getParameter(...) : String | BeanShellInjection.java:15:45:15:48 | code : String | provenance | Src:MaD:44684 | | BeanShellInjection.java:15:45:15:48 | code : String | BeanShellInjection.java:15:22:15:49 | new StaticScriptSource(...) | provenance | Config | -| BeanShellInjection.java:20:17:20:44 | getParameter(...) : String | BeanShellInjection.java:22:20:22:23 | code | provenance | Src:MaD:44686 | -| BeanShellInjection.java:27:17:27:44 | getParameter(...) : String | BeanShellInjection.java:29:32:29:35 | code : String | provenance | Src:MaD:44686 | +| BeanShellInjection.java:20:17:20:44 | getParameter(...) : String | BeanShellInjection.java:22:20:22:23 | code | provenance | Src:MaD:44684 | +| BeanShellInjection.java:27:17:27:44 | getParameter(...) : String | BeanShellInjection.java:29:32:29:35 | code : String | provenance | Src:MaD:44684 | | BeanShellInjection.java:29:3:29:20 | staticScriptSource : StaticScriptSource | BeanShellInjection.java:31:22:31:39 | staticScriptSource | provenance | | | BeanShellInjection.java:29:32:29:35 | code : String | BeanShellInjection.java:29:3:29:20 | staticScriptSource : StaticScriptSource | provenance | Config | nodes diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/JShellInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/JShellInjection.expected index 4cb5386393b2..f83ab5b99383 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/JShellInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/JShellInjection.expected @@ -1,7 +1,7 @@ edges -| JShellInjection.java:12:18:12:45 | getParameter(...) : String | JShellInjection.java:15:15:15:19 | input | provenance | Src:MaD:44686 | -| JShellInjection.java:20:18:20:45 | getParameter(...) : String | JShellInjection.java:24:31:24:35 | input | provenance | Src:MaD:44686 | -| JShellInjection.java:29:18:29:45 | getParameter(...) : String | JShellInjection.java:33:37:33:41 | input : String | provenance | Src:MaD:44686 | +| JShellInjection.java:12:18:12:45 | getParameter(...) : String | JShellInjection.java:15:15:15:19 | input | provenance | Src:MaD:44684 | +| JShellInjection.java:20:18:20:45 | getParameter(...) : String | JShellInjection.java:24:31:24:35 | input | provenance | Src:MaD:44684 | +| JShellInjection.java:29:18:29:45 | getParameter(...) : String | JShellInjection.java:33:37:33:41 | input : String | provenance | Src:MaD:44684 | | JShellInjection.java:33:15:33:42 | analyzeCompletion(...) : CompletionInfo | JShellInjection.java:37:16:37:19 | info : CompletionInfo | provenance | | | JShellInjection.java:33:37:33:41 | input : String | JShellInjection.java:33:15:33:42 | analyzeCompletion(...) : CompletionInfo | provenance | Config | | JShellInjection.java:35:12:35:50 | analyzeCompletion(...) : CompletionInfo | JShellInjection.java:37:16:37:19 | info : CompletionInfo | provenance | | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected index 0b13effc2664..a654e3960935 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/JakartaExpressionInjection.expected @@ -1,8 +1,8 @@ edges -| JakartaExpressionInjection.java:23:25:23:47 | getInputStream(...) : InputStream | JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | provenance | Src:MaD:42938 MaD:42628 | +| JakartaExpressionInjection.java:23:25:23:47 | getInputStream(...) : InputStream | JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | provenance | Src:MaD:42936 MaD:42629 | | JakartaExpressionInjection.java:23:54:23:58 | bytes [post update] : byte[] | JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | provenance | | | JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | JakartaExpressionInjection.java:25:31:25:40 | expression : String | provenance | | -| JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | provenance | MaD:42747 | +| JakartaExpressionInjection.java:24:48:24:52 | bytes : byte[] | JakartaExpressionInjection.java:24:37:24:59 | new String(...) : String | provenance | MaD:42745 | | JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:32:24:32:33 | expression : String | provenance | | | JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:40:24:40:33 | expression : String | provenance | | | JakartaExpressionInjection.java:25:31:25:40 | expression : String | JakartaExpressionInjection.java:48:24:48:33 | expression : String | provenance | | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected index 8fcd2df24080..7c7ba7bf9be3 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/JythonInjection.expected @@ -1,9 +1,9 @@ edges -| JythonInjection.java:28:23:28:50 | getParameter(...) : String | JythonInjection.java:36:30:36:33 | code | provenance | Src:MaD:44686 | -| JythonInjection.java:53:23:53:50 | getParameter(...) : String | JythonInjection.java:58:44:58:47 | code | provenance | Src:MaD:44686 | -| JythonInjection.java:73:23:73:50 | getParameter(...) : String | JythonInjection.java:81:35:81:38 | code | provenance | Src:MaD:44686 | -| JythonInjection.java:97:23:97:50 | getParameter(...) : String | JythonInjection.java:106:61:106:64 | code : String | provenance | Src:MaD:44686 | -| JythonInjection.java:106:61:106:64 | code : String | JythonInjection.java:106:61:106:75 | getBytes(...) | provenance | MaD:42758 | +| JythonInjection.java:28:23:28:50 | getParameter(...) : String | JythonInjection.java:36:30:36:33 | code | provenance | Src:MaD:44684 | +| JythonInjection.java:53:23:53:50 | getParameter(...) : String | JythonInjection.java:58:44:58:47 | code | provenance | Src:MaD:44684 | +| JythonInjection.java:73:23:73:50 | getParameter(...) : String | JythonInjection.java:81:35:81:38 | code | provenance | Src:MaD:44684 | +| JythonInjection.java:97:23:97:50 | getParameter(...) : String | JythonInjection.java:106:61:106:64 | code : String | provenance | Src:MaD:44684 | +| JythonInjection.java:106:61:106:64 | code : String | JythonInjection.java:106:61:106:75 | getBytes(...) | provenance | MaD:42756 | nodes | JythonInjection.java:28:23:28:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JythonInjection.java:36:30:36:33 | code | semmle.label | code | diff --git a/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected index 50712d7526a5..d1e9e341591d 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-094/ScriptInjection.expected @@ -1,20 +1,20 @@ edges -| RhinoServlet.java:28:23:28:50 | getParameter(...) : String | RhinoServlet.java:32:55:32:58 | code | provenance | Src:MaD:44686 | -| RhinoServlet.java:81:23:81:50 | getParameter(...) : String | RhinoServlet.java:83:54:83:57 | code | provenance | Src:MaD:44686 | -| RhinoServlet.java:88:23:88:50 | getParameter(...) : String | RhinoServlet.java:89:74:89:77 | code : String | provenance | Src:MaD:44686 | -| RhinoServlet.java:89:74:89:77 | code : String | RhinoServlet.java:89:74:89:88 | getBytes(...) | provenance | MaD:42758 | +| RhinoServlet.java:28:23:28:50 | getParameter(...) : String | RhinoServlet.java:32:55:32:58 | code | provenance | Src:MaD:44684 | +| RhinoServlet.java:81:23:81:50 | getParameter(...) : String | RhinoServlet.java:83:54:83:57 | code | provenance | Src:MaD:44684 | +| RhinoServlet.java:88:23:88:50 | getParameter(...) : String | RhinoServlet.java:89:74:89:77 | code : String | provenance | Src:MaD:44684 | +| RhinoServlet.java:89:74:89:77 | code : String | RhinoServlet.java:89:74:89:88 | getBytes(...) | provenance | MaD:42756 | | ScriptEngineTest.java:20:44:20:55 | input : String | ScriptEngineTest.java:24:37:24:41 | input | provenance | | | ScriptEngineTest.java:27:51:27:62 | input : String | ScriptEngineTest.java:31:31:31:35 | input | provenance | | | ScriptEngineTest.java:35:58:35:69 | input : String | ScriptEngineTest.java:39:31:39:35 | input | provenance | | | ScriptEngineTest.java:42:46:42:57 | input : String | ScriptEngineTest.java:46:31:46:35 | input | provenance | | | ScriptEngineTest.java:49:41:49:52 | input : String | ScriptEngineTest.java:52:42:52:46 | input | provenance | | | ScriptEngineTest.java:56:41:56:52 | input : String | ScriptEngineTest.java:59:51:59:55 | input | provenance | | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:93:57:93:60 | code : String | provenance | Src:MaD:44686 | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:94:64:94:67 | code : String | provenance | Src:MaD:44686 | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:95:71:95:74 | code : String | provenance | Src:MaD:44686 | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:96:59:96:62 | code : String | provenance | Src:MaD:44686 | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:97:54:97:57 | code : String | provenance | Src:MaD:44686 | -| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:98:54:98:57 | code : String | provenance | Src:MaD:44686 | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:93:57:93:60 | code : String | provenance | Src:MaD:44684 | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:94:64:94:67 | code : String | provenance | Src:MaD:44684 | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:95:71:95:74 | code : String | provenance | Src:MaD:44684 | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:96:59:96:62 | code : String | provenance | Src:MaD:44684 | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:97:54:97:57 | code : String | provenance | Src:MaD:44684 | +| ScriptEngineTest.java:91:18:91:45 | getParameter(...) : String | ScriptEngineTest.java:98:54:98:57 | code : String | provenance | Src:MaD:44684 | | ScriptEngineTest.java:93:57:93:60 | code : String | ScriptEngineTest.java:20:44:20:55 | input : String | provenance | | | ScriptEngineTest.java:94:64:94:67 | code : String | ScriptEngineTest.java:27:51:27:62 | input : String | provenance | | | ScriptEngineTest.java:95:71:95:74 | code : String | ScriptEngineTest.java:35:58:35:69 | input : String | provenance | | diff --git a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected b/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected index 8b9efb184b35..5d22857f5a04 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected @@ -1,25 +1,25 @@ edges | SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | provenance | | -| SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | provenance | Sink:MaD:44677 | +| SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | provenance | Sink:MaD:44675 | | SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | provenance | Config | -| SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | provenance | MaD:44683 | -| SensitiveCookieNotHttpOnly.java:42:42:42:49 | "token=" : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | provenance | Sink:MaD:44678 | -| SensitiveCookieNotHttpOnly.java:42:42:42:57 | ... + ... : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | provenance | Sink:MaD:44678 | -| SensitiveCookieNotHttpOnly.java:52:42:52:113 | new NewCookie(...) : NewCookie | SensitiveCookieNotHttpOnly.java:52:42:52:124 | toString(...) | provenance | MaD:44726 Sink:MaD:44680 | -| SensitiveCookieNotHttpOnly.java:52:56:52:75 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:52:42:52:113 | new NewCookie(...) : NewCookie | provenance | MaD:44764 | +| SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | provenance | MaD:44681 | +| SensitiveCookieNotHttpOnly.java:42:42:42:49 | "token=" : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | provenance | Sink:MaD:44676 | +| SensitiveCookieNotHttpOnly.java:42:42:42:57 | ... + ... : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | provenance | Sink:MaD:44676 | +| SensitiveCookieNotHttpOnly.java:52:42:52:113 | new NewCookie(...) : NewCookie | SensitiveCookieNotHttpOnly.java:52:42:52:124 | toString(...) | provenance | MaD:44724 Sink:MaD:44678 | +| SensitiveCookieNotHttpOnly.java:52:56:52:75 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:52:42:52:113 | new NewCookie(...) : NewCookie | provenance | MaD:44762 | | SensitiveCookieNotHttpOnly.java:63:37:63:115 | new NewCookie(...) : NewCookie | SensitiveCookieNotHttpOnly.java:64:25:64:39 | accessKeyCookie : NewCookie | provenance | | -| SensitiveCookieNotHttpOnly.java:63:51:63:70 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:63:37:63:115 | new NewCookie(...) : NewCookie | provenance | MaD:44764 | -| SensitiveCookieNotHttpOnly.java:64:25:64:39 | accessKeyCookie : NewCookie | SensitiveCookieNotHttpOnly.java:64:25:64:50 | toString(...) : String | provenance | MaD:44726 | -| SensitiveCookieNotHttpOnly.java:64:25:64:50 | toString(...) : String | SensitiveCookieNotHttpOnly.java:65:42:65:47 | keyStr | provenance | Sink:MaD:44680 | -| SensitiveCookieNotHttpOnly.java:70:28:70:35 | "token=" : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | Sink:MaD:44678 | -| SensitiveCookieNotHttpOnly.java:70:28:70:43 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | Sink:MaD:44678 | -| SensitiveCookieNotHttpOnly.java:70:28:70:55 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | Sink:MaD:44678 | +| SensitiveCookieNotHttpOnly.java:63:51:63:70 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:63:37:63:115 | new NewCookie(...) : NewCookie | provenance | MaD:44762 | +| SensitiveCookieNotHttpOnly.java:64:25:64:39 | accessKeyCookie : NewCookie | SensitiveCookieNotHttpOnly.java:64:25:64:50 | toString(...) : String | provenance | MaD:44724 | +| SensitiveCookieNotHttpOnly.java:64:25:64:50 | toString(...) : String | SensitiveCookieNotHttpOnly.java:65:42:65:47 | keyStr | provenance | Sink:MaD:44678 | +| SensitiveCookieNotHttpOnly.java:70:28:70:35 | "token=" : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | Sink:MaD:44676 | +| SensitiveCookieNotHttpOnly.java:70:28:70:43 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | Sink:MaD:44676 | +| SensitiveCookieNotHttpOnly.java:70:28:70:55 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | provenance | Sink:MaD:44676 | | SensitiveCookieNotHttpOnly.java:88:35:88:51 | "Presto-UI-Token" : String | SensitiveCookieNotHttpOnly.java:89:36:89:51 | PRESTO_UI_COOKIE : String | provenance | | | SensitiveCookieNotHttpOnly.java:89:25:89:57 | new Cookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:91:16:91:21 | cookie : Cookie | provenance | | | SensitiveCookieNotHttpOnly.java:89:36:89:51 | PRESTO_UI_COOKIE : String | SensitiveCookieNotHttpOnly.java:89:25:89:57 | new Cookie(...) : Cookie | provenance | Config | -| SensitiveCookieNotHttpOnly.java:89:36:89:51 | PRESTO_UI_COOKIE : String | SensitiveCookieNotHttpOnly.java:89:25:89:57 | new Cookie(...) : Cookie | provenance | MaD:44683 | +| SensitiveCookieNotHttpOnly.java:89:36:89:51 | PRESTO_UI_COOKIE : String | SensitiveCookieNotHttpOnly.java:89:25:89:57 | new Cookie(...) : Cookie | provenance | MaD:44681 | | SensitiveCookieNotHttpOnly.java:91:16:91:21 | cookie : Cookie | SensitiveCookieNotHttpOnly.java:110:25:110:64 | createAuthenticationCookie(...) : Cookie | provenance | | -| SensitiveCookieNotHttpOnly.java:110:25:110:64 | createAuthenticationCookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | provenance | Sink:MaD:44677 | +| SensitiveCookieNotHttpOnly.java:110:25:110:64 | createAuthenticationCookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | provenance | Sink:MaD:44675 | nodes | SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | semmle.label | "jwt_token" : String | | SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | semmle.label | new Cookie(...) : Cookie | diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected b/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected index d1d06b498067..ffa5fa5ed943 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected @@ -34,7 +34,7 @@ edges | InsecureWebResourceResponse.java:86:41:86:43 | url : String | InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | provenance | MaD:514 | | InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | provenance | | | InsecureWebResourceResponse.java:88:66:88:68 | uri : Uri | InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | provenance | MaD:503 | -| InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | provenance | MaD:42613 | +| InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | provenance | MaD:42614 | | InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:91:75:91:85 | inputStream | provenance | | | InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | provenance | MaD:1981 | | InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | AdditionalTaintStep | @@ -47,10 +47,10 @@ edges | InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | provenance | | | InsecureWebResourceResponse.java:112:41:112:43 | url : String | InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | provenance | MaD:514 | | InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | provenance | MaD:504 | -| InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | provenance | MaD:42776 | +| InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | provenance | MaD:42774 | | InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | InsecureWebResourceResponse.java:115:75:115:78 | path : String | provenance | | | InsecureWebResourceResponse.java:115:55:115:108 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:117:75:117:85 | inputStream | provenance | | -| InsecureWebResourceResponse.java:115:75:115:78 | path : String | InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | provenance | MaD:42776 | +| InsecureWebResourceResponse.java:115:75:115:78 | path : String | InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | provenance | MaD:42774 | | InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | InsecureWebResourceResponse.java:115:55:115:108 | new FileInputStream(...) : FileInputStream | provenance | MaD:1981 | | InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | AdditionalTaintStep | | InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | provenance | AdditionalTaintStep | @@ -81,7 +81,7 @@ edges | InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | provenance | | | InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | provenance | | | InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | provenance | MaD:503 | -| InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | provenance | MaD:42613 | +| InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | provenance | MaD:42614 | | InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:199:75:199:85 | inputStream | provenance | | | InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | provenance | MaD:1981 | | InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | provenance | AdditionalTaintStep | diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index f837e748a80c..3d4bf9b985cf 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -10,7 +10,7 @@ edges | FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : String | provenance | | | FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | provenance | | | FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : String[] | provenance | | -| FileService.java:44:33:44:52 | (...)... : String[] | FileService.java:45:53:45:59 | ...[...] | provenance | Sink:MaD:42556 | +| FileService.java:44:33:44:52 | (...)... : String[] | FileService.java:45:53:45:59 | ...[...] | provenance | Sink:MaD:42557 | | LeakFileActivity2.java:15:13:15:18 | intent : Intent | LeakFileActivity2.java:16:26:16:31 | intent : Intent | provenance | | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | provenance | | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | provenance | Config | @@ -18,7 +18,7 @@ edges | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | provenance | | | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | provenance | MaD:317 | | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | provenance | | -| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | LeakFileActivity.java:21:58:21:82 | getPath(...) | provenance | MaD:504 Sink:MaD:42592 | +| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | LeakFileActivity.java:21:58:21:82 | getPath(...) | provenance | MaD:504 Sink:MaD:42593 | nodes | FileService.java:20:31:20:43 | intent : Intent | semmle.label | intent : Intent | | FileService.java:21:28:21:33 | intent : Intent | semmle.label | intent : Intent | diff --git a/java/ql/test/experimental/query-tests/security/CWE-208/TimingAttackAgainstSignagure/Test.expected b/java/ql/test/experimental/query-tests/security/CWE-208/TimingAttackAgainstSignagure/Test.expected index 23608574ad00..65469b7fdf58 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-208/TimingAttackAgainstSignagure/Test.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-208/TimingAttackAgainstSignagure/Test.expected @@ -6,7 +6,7 @@ edges | Test.java:99:26:99:45 | doFinal(...) : byte[] | Test.java:101:49:101:51 | tag | provenance | | | Test.java:116:28:116:30 | tag : byte[] | Test.java:118:44:118:46 | tag | provenance | | | Test.java:134:56:134:58 | tag : ByteBuffer | Test.java:136:44:136:46 | tag : ByteBuffer | provenance | | -| Test.java:136:44:136:46 | tag : ByteBuffer | Test.java:136:44:136:54 | array(...) | provenance | MaD:43125 | +| Test.java:136:44:136:46 | tag : ByteBuffer | Test.java:136:44:136:54 | array(...) | provenance | MaD:43123 | | Test.java:148:56:148:58 | tag : ByteBuffer | Test.java:150:53:150:55 | tag | provenance | | | Test.java:174:26:174:50 | doFinal(...) : byte[] | Test.java:176:44:176:46 | tag | provenance | | | Test.java:201:34:201:50 | doFinal(...) : byte[] | Test.java:204:26:204:36 | computedTag | provenance | | diff --git a/java/ql/test/experimental/query-tests/security/CWE-346/UnvalidatedCors.expected b/java/ql/test/experimental/query-tests/security/CWE-346/UnvalidatedCors.expected index 7e693c186769..3e313091fd06 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-346/UnvalidatedCors.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-346/UnvalidatedCors.expected @@ -1,5 +1,5 @@ edges -| UnvalidatedCors.java:21:22:21:48 | getHeader(...) : String | UnvalidatedCors.java:27:67:27:69 | url | provenance | Src:MaD:44664 Sink:MaD:44678 | +| UnvalidatedCors.java:21:22:21:48 | getHeader(...) : String | UnvalidatedCors.java:27:67:27:69 | url | provenance | Src:MaD:44662 Sink:MaD:44676 | nodes | UnvalidatedCors.java:21:22:21:48 | getHeader(...) : String | semmle.label | getHeader(...) : String | | UnvalidatedCors.java:27:67:27:69 | url | semmle.label | url | diff --git a/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected b/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected index 2f378f3f63a9..93263148faba 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-348/ClientSuppliedIpUsedInSecurityCheck.expected @@ -1,8 +1,8 @@ edges | ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:17:37:17:38 | ip | provenance | | | ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:25:33:25:34 | ip | provenance | | -| ClientSuppliedIpUsedInSecurityCheck.java:43:27:43:62 | getHeader(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | provenance | Src:MaD:44664 | -| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | provenance | MaD:42771 | +| ClientSuppliedIpUsedInSecurityCheck.java:43:27:43:62 | getHeader(...) : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | provenance | Src:MaD:44662 | +| ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:23 | xfHeader : String | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | provenance | MaD:42769 | | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:34 | split(...) : String[] | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | provenance | | | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | ClientSuppliedIpUsedInSecurityCheck.java:16:21:16:33 | getClientIP(...) : String | provenance | | | ClientSuppliedIpUsedInSecurityCheck.java:47:16:47:37 | ...[...] : String | ClientSuppliedIpUsedInSecurityCheck.java:24:21:24:33 | getClientIP(...) : String | provenance | | diff --git a/java/ql/test/experimental/query-tests/security/CWE-352/JsonpInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-352/JsonpInjection.expected index a5481153d891..b9fae648aa5d 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-352/JsonpInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-352/JsonpInjection.expected @@ -1,11 +1,11 @@ edges -| JsonpController.java:33:32:33:68 | getParameter(...) : String | JsonpController.java:37:16:37:24 | resultStr | provenance | Src:MaD:44686 | -| JsonpController.java:44:32:44:68 | getParameter(...) : String | JsonpController.java:46:16:46:24 | resultStr | provenance | Src:MaD:44686 | -| JsonpController.java:53:32:53:68 | getParameter(...) : String | JsonpController.java:56:16:56:24 | resultStr | provenance | Src:MaD:44686 | -| JsonpController.java:63:32:63:68 | getParameter(...) : String | JsonpController.java:66:16:66:24 | resultStr | provenance | Src:MaD:44686 | -| JsonpController.java:73:32:73:68 | getParameter(...) : String | JsonpController.java:80:20:80:28 | resultStr | provenance | Src:MaD:44686 Sink:MaD:42591 | -| JsonpController.java:87:32:87:68 | getParameter(...) : String | JsonpController.java:94:20:94:28 | resultStr | provenance | Src:MaD:44686 Sink:MaD:42591 | -| JsonpController.java:101:32:101:68 | getParameter(...) : String | JsonpController.java:105:16:105:24 | resultStr | provenance | Src:MaD:44686 | +| JsonpController.java:33:32:33:68 | getParameter(...) : String | JsonpController.java:37:16:37:24 | resultStr | provenance | Src:MaD:44684 | +| JsonpController.java:44:32:44:68 | getParameter(...) : String | JsonpController.java:46:16:46:24 | resultStr | provenance | Src:MaD:44684 | +| JsonpController.java:53:32:53:68 | getParameter(...) : String | JsonpController.java:56:16:56:24 | resultStr | provenance | Src:MaD:44684 | +| JsonpController.java:63:32:63:68 | getParameter(...) : String | JsonpController.java:66:16:66:24 | resultStr | provenance | Src:MaD:44684 | +| JsonpController.java:73:32:73:68 | getParameter(...) : String | JsonpController.java:80:20:80:28 | resultStr | provenance | Src:MaD:44684 Sink:MaD:42592 | +| JsonpController.java:87:32:87:68 | getParameter(...) : String | JsonpController.java:94:20:94:28 | resultStr | provenance | Src:MaD:44684 Sink:MaD:42592 | +| JsonpController.java:101:32:101:68 | getParameter(...) : String | JsonpController.java:105:16:105:24 | resultStr | provenance | Src:MaD:44684 | nodes | JsonpController.java:33:32:33:68 | getParameter(...) : String | semmle.label | getParameter(...) : String | | JsonpController.java:37:16:37:24 | resultStr | semmle.label | resultStr | diff --git a/java/ql/test/experimental/query-tests/security/CWE-400/ThreadResourceAbuse.expected b/java/ql/test/experimental/query-tests/security/CWE-400/ThreadResourceAbuse.expected index 61d0be45d26a..f473b0fb41f5 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-400/ThreadResourceAbuse.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-400/ThreadResourceAbuse.expected @@ -1,9 +1,9 @@ edges -| ThreadResourceAbuse.java:18:25:18:57 | getParameter(...) : String | ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | provenance | Src:MaD:44686 TaintPreservingCallable | +| ThreadResourceAbuse.java:18:25:18:57 | getParameter(...) : String | ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | provenance | Src:MaD:44684 TaintPreservingCallable | | ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | provenance | | -| ThreadResourceAbuse.java:29:82:29:114 | getParameter(...) : String | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | provenance | Src:MaD:44686 TaintPreservingCallable | +| ThreadResourceAbuse.java:29:82:29:114 | getParameter(...) : String | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | provenance | Src:MaD:44684 TaintPreservingCallable | | ThreadResourceAbuse.java:30:4:30:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | ThreadResourceAbuse.java:30:4:30:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | provenance | | @@ -12,15 +12,15 @@ edges | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | waitTime | provenance | Sink:MaD:1982 | -| ThreadResourceAbuse.java:141:27:141:43 | getValue(...) : String | ThreadResourceAbuse.java:144:34:144:42 | delayTime | provenance | Src:MaD:44663 TaintPreservingCallable Sink:MaD:1985 | -| ThreadResourceAbuse.java:172:19:172:50 | getHeader(...) : String | ThreadResourceAbuse.java:176:17:176:26 | retryAfter | provenance | Src:MaD:44664 TaintPreservingCallable Sink:MaD:1982 | -| ThreadResourceAbuse.java:206:28:206:56 | getParameter(...) : String | ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | provenance | Src:MaD:44686 TaintPreservingCallable | +| ThreadResourceAbuse.java:141:27:141:43 | getValue(...) : String | ThreadResourceAbuse.java:144:34:144:42 | delayTime | provenance | Src:MaD:44661 TaintPreservingCallable Sink:MaD:1985 | +| ThreadResourceAbuse.java:172:19:172:50 | getHeader(...) : String | ThreadResourceAbuse.java:176:17:176:26 | retryAfter | provenance | Src:MaD:44662 TaintPreservingCallable Sink:MaD:1982 | +| ThreadResourceAbuse.java:206:28:206:56 | getParameter(...) : String | ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | provenance | Src:MaD:44684 TaintPreservingCallable | | ThreadResourceAbuse.java:209:30:209:87 | new UploadListener(...) : UploadListener [slowUploads] : Number | UploadListener.java:28:14:28:19 | parameter this : UploadListener [slowUploads] : Number | provenance | | | ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | ThreadResourceAbuse.java:209:30:209:87 | new UploadListener(...) : UploadListener [slowUploads] : Number | provenance | | | ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | provenance | | -| ThreadResourceAbuse.java:215:19:215:50 | getHeader(...) : String | ThreadResourceAbuse.java:219:17:219:26 | retryAfter : Number | provenance | Src:MaD:44664 TaintPreservingCallable | +| ThreadResourceAbuse.java:215:19:215:50 | getHeader(...) : String | ThreadResourceAbuse.java:219:17:219:26 | retryAfter : Number | provenance | Src:MaD:44662 TaintPreservingCallable | | ThreadResourceAbuse.java:219:17:219:26 | retryAfter : Number | ThreadResourceAbuse.java:219:17:219:33 | ... * ... | provenance | Config Sink:MaD:1982 | -| ThreadResourceAbuse.java:227:19:227:50 | getHeader(...) : String | ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | provenance | Src:MaD:44664 TaintPreservingCallable | +| ThreadResourceAbuse.java:227:19:227:50 | getHeader(...) : String | ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | provenance | Src:MaD:44662 TaintPreservingCallable | | ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | provenance | Config | | ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | ThreadResourceAbuse.java:233:17:233:26 | retryAfter | provenance | Sink:MaD:1982 | | UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | UploadListener.java:16:17:16:33 | sleepMilliseconds : Number | provenance | | diff --git a/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected b/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected index d660deebd2e0..e88b58603bc1 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected @@ -1,12 +1,12 @@ edges -| UnsafeReflection.java:21:28:21:60 | getParameter(...) : String | UnsafeReflection.java:24:41:24:49 | className : String | provenance | Src:MaD:44686 | -| UnsafeReflection.java:22:33:22:70 | getParameter(...) : String | UnsafeReflection.java:25:76:25:89 | parameterValue | provenance | Src:MaD:44686 | +| UnsafeReflection.java:21:28:21:60 | getParameter(...) : String | UnsafeReflection.java:24:41:24:49 | className : String | provenance | Src:MaD:44684 | +| UnsafeReflection.java:22:33:22:70 | getParameter(...) : String | UnsafeReflection.java:25:76:25:89 | parameterValue | provenance | Src:MaD:44684 | | UnsafeReflection.java:24:27:24:50 | forName(...) : Class | UnsafeReflection.java:25:29:25:33 | clazz : Class | provenance | | | UnsafeReflection.java:24:41:24:49 | className : String | UnsafeReflection.java:24:27:24:50 | forName(...) : Class | provenance | Config | | UnsafeReflection.java:25:29:25:33 | clazz : Class | UnsafeReflection.java:25:29:25:59 | getDeclaredConstructors(...) : Constructor[] | provenance | Config | | UnsafeReflection.java:25:29:25:59 | getDeclaredConstructors(...) : Constructor[] | UnsafeReflection.java:25:29:25:62 | ...[...] | provenance | | -| UnsafeReflection.java:33:28:33:60 | getParameter(...) : String | UnsafeReflection.java:37:49:37:57 | className : String | provenance | Src:MaD:44686 | -| UnsafeReflection.java:34:33:34:70 | getParameter(...) : String | UnsafeReflection.java:39:58:39:71 | parameterValue | provenance | Src:MaD:44686 | +| UnsafeReflection.java:33:28:33:60 | getParameter(...) : String | UnsafeReflection.java:37:49:37:57 | className : String | provenance | Src:MaD:44684 | +| UnsafeReflection.java:34:33:34:70 | getParameter(...) : String | UnsafeReflection.java:39:58:39:71 | parameterValue | provenance | Src:MaD:44684 | | UnsafeReflection.java:37:27:37:58 | loadClass(...) : Class | UnsafeReflection.java:38:29:38:33 | clazz : Class | provenance | | | UnsafeReflection.java:37:49:37:57 | className : String | UnsafeReflection.java:37:27:37:58 | loadClass(...) : Class | provenance | Config | | UnsafeReflection.java:38:29:38:33 | clazz : Class | UnsafeReflection.java:38:29:38:47 | newInstance(...) : Object | provenance | Config | @@ -17,13 +17,13 @@ edges | UnsafeReflection.java:46:24:46:82 | beanIdOrClassName : String | UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | provenance | | | UnsafeReflection.java:46:132:46:168 | body : Map | UnsafeReflection.java:49:37:49:40 | body : Map | provenance | | | UnsafeReflection.java:49:23:49:59 | (...)... : List | UnsafeReflection.java:53:67:53:73 | rawData : List | provenance | | -| UnsafeReflection.java:49:37:49:40 | body : Map | UnsafeReflection.java:49:37:49:59 | get(...) : Object | provenance | MaD:43884 | +| UnsafeReflection.java:49:37:49:40 | body : Map | UnsafeReflection.java:49:37:49:59 | get(...) : Object | provenance | MaD:43882 | | UnsafeReflection.java:49:37:49:59 | get(...) : Object | UnsafeReflection.java:49:23:49:59 | (...)... : List | provenance | | | UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | provenance | | | UnsafeReflection.java:53:67:53:73 | rawData : List | UnsafeReflection.java:104:102:104:118 | data : List | provenance | | -| UnsafeReflection.java:62:33:62:70 | getParameter(...) : String | UnsafeReflection.java:68:76:68:89 | parameterValue | provenance | Src:MaD:44686 | -| UnsafeReflection.java:77:33:77:70 | getParameter(...) : String | UnsafeReflection.java:83:76:83:89 | parameterValue | provenance | Src:MaD:44686 | -| UnsafeReflection.java:92:33:92:70 | getParameter(...) : String | UnsafeReflection.java:98:76:98:89 | parameterValue | provenance | Src:MaD:44686 | +| UnsafeReflection.java:62:33:62:70 | getParameter(...) : String | UnsafeReflection.java:68:76:68:89 | parameterValue | provenance | Src:MaD:44684 | +| UnsafeReflection.java:77:33:77:70 | getParameter(...) : String | UnsafeReflection.java:83:76:83:89 | parameterValue | provenance | Src:MaD:44684 | +| UnsafeReflection.java:92:33:92:70 | getParameter(...) : String | UnsafeReflection.java:98:76:98:89 | parameterValue | provenance | Src:MaD:44684 | | UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | UnsafeReflection.java:108:39:108:55 | beanIdOrClassName : String | provenance | | | UnsafeReflection.java:104:102:104:118 | data : List | UnsafeReflection.java:119:41:119:44 | data | provenance | | | UnsafeReflection.java:108:25:108:56 | forName(...) : Class | UnsafeReflection.java:109:31:109:39 | beanClass : Class | provenance | | diff --git a/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected b/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected index b84998251e7d..83dc860257e4 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected @@ -1,17 +1,17 @@ edges -| SensitiveGetQuery2.java:12:13:12:37 | getParameterMap(...) : Map | SensitiveGetQuery2.java:14:30:14:32 | map : Map | provenance | Src:MaD:44687 | +| SensitiveGetQuery2.java:12:13:12:37 | getParameterMap(...) : Map | SensitiveGetQuery2.java:14:30:14:32 | map : Map | provenance | Src:MaD:44685 | | SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | SensitiveGetQuery2.java:15:29:15:36 | password | provenance | | | SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | SensitiveGetQuery2.java:15:29:15:36 | password : String | provenance | | -| SensitiveGetQuery2.java:14:30:14:32 | map : Map | SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | provenance | MaD:43884 | +| SensitiveGetQuery2.java:14:30:14:32 | map : Map | SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | provenance | MaD:43882 | | SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | provenance | | | SensitiveGetQuery2.java:15:29:15:36 | password : String | SensitiveGetQuery2.java:18:40:18:54 | password : String | provenance | | | SensitiveGetQuery2.java:18:40:18:54 | password : String | SensitiveGetQuery2.java:19:61:19:68 | password | provenance | | | SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | SensitiveGetQuery3.java:13:57:13:64 | password | provenance | | -| SensitiveGetQuery3.java:17:10:17:40 | getParameter(...) : String | SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | provenance | Src:MaD:44686 | +| SensitiveGetQuery3.java:17:10:17:40 | getParameter(...) : String | SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | provenance | Src:MaD:44684 | | SensitiveGetQuery4.java:14:24:14:66 | getRequestParameter(...) : String | SensitiveGetQuery4.java:16:37:16:47 | accessToken | provenance | | -| SensitiveGetQuery4.java:20:10:20:40 | getParameter(...) : String | SensitiveGetQuery4.java:14:24:14:66 | getRequestParameter(...) : String | provenance | Src:MaD:44686 | -| SensitiveGetQuery.java:12:21:12:52 | getParameter(...) : String | SensitiveGetQuery.java:14:29:14:36 | password | provenance | Src:MaD:44686 | -| SensitiveGetQuery.java:12:21:12:52 | getParameter(...) : String | SensitiveGetQuery.java:14:29:14:36 | password : String | provenance | Src:MaD:44686 | +| SensitiveGetQuery4.java:20:10:20:40 | getParameter(...) : String | SensitiveGetQuery4.java:14:24:14:66 | getRequestParameter(...) : String | provenance | Src:MaD:44684 | +| SensitiveGetQuery.java:12:21:12:52 | getParameter(...) : String | SensitiveGetQuery.java:14:29:14:36 | password | provenance | Src:MaD:44684 | +| SensitiveGetQuery.java:12:21:12:52 | getParameter(...) : String | SensitiveGetQuery.java:14:29:14:36 | password : String | provenance | Src:MaD:44684 | | SensitiveGetQuery.java:14:29:14:36 | password : String | SensitiveGetQuery.java:17:40:17:54 | password : String | provenance | | | SensitiveGetQuery.java:17:40:17:54 | password : String | SensitiveGetQuery.java:18:61:18:68 | password | provenance | | nodes diff --git a/java/ql/test/experimental/query-tests/security/CWE-600/UncaughtServletException.expected b/java/ql/test/experimental/query-tests/security/CWE-600/UncaughtServletException.expected index cc6d3ebca40f..28867eeabf12 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-600/UncaughtServletException.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-600/UncaughtServletException.expected @@ -1,8 +1,8 @@ edges -| UncaughtServletException.java:13:15:13:43 | getParameter(...) : String | UncaughtServletException.java:14:44:14:45 | ip | provenance | Src:MaD:44686 | -| UncaughtServletException.java:16:19:16:41 | getRemoteUser(...) : String | UncaughtServletException.java:17:20:17:25 | userId | provenance | Src:MaD:44673 | -| UncaughtServletException.java:54:16:54:44 | getParameter(...) : String | UncaughtServletException.java:55:45:55:46 | ip | provenance | Src:MaD:44686 | -| UncaughtServletException.java:75:21:75:43 | getRemoteUser(...) : String | UncaughtServletException.java:76:22:76:27 | userId | provenance | Src:MaD:44673 | +| UncaughtServletException.java:13:15:13:43 | getParameter(...) : String | UncaughtServletException.java:14:44:14:45 | ip | provenance | Src:MaD:44684 | +| UncaughtServletException.java:16:19:16:41 | getRemoteUser(...) : String | UncaughtServletException.java:17:20:17:25 | userId | provenance | Src:MaD:44671 | +| UncaughtServletException.java:54:16:54:44 | getParameter(...) : String | UncaughtServletException.java:55:45:55:46 | ip | provenance | Src:MaD:44684 | +| UncaughtServletException.java:75:21:75:43 | getRemoteUser(...) : String | UncaughtServletException.java:76:22:76:27 | userId | provenance | Src:MaD:44671 | nodes | UncaughtServletException.java:13:15:13:43 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UncaughtServletException.java:14:44:14:45 | ip | semmle.label | ip | diff --git a/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected b/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected index 60f136251bc8..9b1f0897b565 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-601/SpringUrlRedirect.expected @@ -6,35 +6,35 @@ edges | SpringUrlRedirect.java:41:24:41:41 | redirectUrl : String | SpringUrlRedirect.java:44:29:44:39 | redirectUrl | provenance | | | SpringUrlRedirect.java:49:24:49:41 | redirectUrl : String | SpringUrlRedirect.java:52:30:52:40 | redirectUrl | provenance | | | SpringUrlRedirect.java:57:24:57:41 | redirectUrl : String | SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | provenance | | -| SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } : Object[] [[]] : String | SpringUrlRedirect.java:58:30:58:66 | format(...) | provenance | MaD:42754 | +| SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } : Object[] [[]] : String | SpringUrlRedirect.java:58:30:58:66 | format(...) | provenance | MaD:42752 | | SpringUrlRedirect.java:58:55:58:65 | redirectUrl : String | SpringUrlRedirect.java:58:30:58:66 | new ..[] { .. } : Object[] [[]] : String | provenance | | | SpringUrlRedirect.java:62:24:62:41 | redirectUrl : String | SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | provenance | | -| SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | SpringUrlRedirect.java:63:30:63:76 | format(...) | provenance | MaD:42753 | +| SpringUrlRedirect.java:63:44:63:68 | ... + ... : String | SpringUrlRedirect.java:63:30:63:76 | format(...) | provenance | MaD:42751 | | SpringUrlRedirect.java:89:38:89:55 | redirectUrl : String | SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | provenance | | -| SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | SpringUrlRedirect.java:91:27:91:49 | create(...) | provenance | MaD:42974 | +| SpringUrlRedirect.java:91:38:91:48 | redirectUrl : String | SpringUrlRedirect.java:91:27:91:49 | create(...) | provenance | MaD:42972 | | SpringUrlRedirect.java:96:39:96:56 | redirectUrl : String | SpringUrlRedirect.java:98:44:98:54 | redirectUrl : String | provenance | | | SpringUrlRedirect.java:98:9:98:19 | httpHeaders : HttpHeaders | SpringUrlRedirect.java:100:37:100:47 | httpHeaders | provenance | | | SpringUrlRedirect.java:98:33:98:55 | create(...) : URI | SpringUrlRedirect.java:98:9:98:19 | httpHeaders : HttpHeaders | provenance | Config | -| SpringUrlRedirect.java:98:44:98:54 | redirectUrl : String | SpringUrlRedirect.java:98:33:98:55 | create(...) : URI | provenance | MaD:42974 | +| SpringUrlRedirect.java:98:44:98:54 | redirectUrl : String | SpringUrlRedirect.java:98:33:98:55 | create(...) : URI | provenance | MaD:42972 | | SpringUrlRedirect.java:104:39:104:56 | redirectUrl : String | SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | provenance | | | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:108:68:108:78 | httpHeaders | provenance | | | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:108:68:108:78 | httpHeaders | provenance | | -| SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders | provenance | MaD:49234 | -| SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | MaD:49475 | +| SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders | provenance | MaD:49240 | +| SpringUrlRedirect.java:106:37:106:47 | redirectUrl : String | SpringUrlRedirect.java:106:9:106:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | MaD:49481 | | SpringUrlRedirect.java:112:39:112:56 | redirectUrl : String | SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | provenance | | | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:116:37:116:47 | httpHeaders | provenance | | | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:116:37:116:47 | httpHeaders | provenance | | -| SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders | provenance | MaD:49234 | -| SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | MaD:49475 | +| SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders | provenance | MaD:49240 | +| SpringUrlRedirect.java:114:37:114:47 | redirectUrl : String | SpringUrlRedirect.java:114:9:114:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | MaD:49481 | | SpringUrlRedirect.java:120:33:120:50 | redirectUrl : String | SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | provenance | | | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders | SpringUrlRedirect.java:124:49:124:59 | httpHeaders | provenance | | | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders [, ] : String | SpringUrlRedirect.java:124:49:124:59 | httpHeaders | provenance | | -| SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders | provenance | MaD:49234 | -| SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | MaD:49475 | +| SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders | provenance | MaD:49240 | +| SpringUrlRedirect.java:122:37:122:47 | redirectUrl : String | SpringUrlRedirect.java:122:9:122:19 | httpHeaders [post update] : HttpHeaders [, ] : String | provenance | MaD:49481 | | SpringUrlRedirect.java:128:33:128:50 | redirectUrl : String | SpringUrlRedirect.java:130:44:130:54 | redirectUrl : String | provenance | | | SpringUrlRedirect.java:130:9:130:19 | httpHeaders : HttpHeaders | SpringUrlRedirect.java:132:49:132:59 | httpHeaders | provenance | | | SpringUrlRedirect.java:130:33:130:55 | create(...) : URI | SpringUrlRedirect.java:130:9:130:19 | httpHeaders : HttpHeaders | provenance | Config | -| SpringUrlRedirect.java:130:44:130:54 | redirectUrl : String | SpringUrlRedirect.java:130:33:130:55 | create(...) : URI | provenance | MaD:42974 | +| SpringUrlRedirect.java:130:44:130:54 | redirectUrl : String | SpringUrlRedirect.java:130:33:130:55 | create(...) : URI | provenance | MaD:42972 | nodes | SpringUrlRedirect.java:17:30:17:47 | redirectUrl : String | semmle.label | redirectUrl : String | | SpringUrlRedirect.java:19:19:19:29 | redirectUrl | semmle.label | redirectUrl | diff --git a/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected b/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected index b98cfc56ec05..b62d3080e919 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-625/PermissiveDotRegex.expected @@ -1,14 +1,14 @@ edges | DotRegexFilter.java:29:19:29:43 | getPathInfo(...) : String | DotRegexFilter.java:32:25:32:30 | source | provenance | Src:MaD:1986 | -| DotRegexFilter.java:29:19:29:43 | getPathInfo(...) : String | DotRegexFilter.java:32:25:32:30 | source | provenance | Src:MaD:44671 | +| DotRegexFilter.java:29:19:29:43 | getPathInfo(...) : String | DotRegexFilter.java:32:25:32:30 | source | provenance | Src:MaD:44669 | | DotRegexServlet.java:19:19:19:39 | getPathInfo(...) : String | DotRegexServlet.java:22:25:22:30 | source | provenance | Src:MaD:1986 | -| DotRegexServlet.java:19:19:19:39 | getPathInfo(...) : String | DotRegexServlet.java:22:25:22:30 | source | provenance | Src:MaD:44671 | +| DotRegexServlet.java:19:19:19:39 | getPathInfo(...) : String | DotRegexServlet.java:22:25:22:30 | source | provenance | Src:MaD:44669 | | DotRegexServlet.java:57:19:57:41 | getRequestURI(...) : String | DotRegexServlet.java:59:21:59:26 | source | provenance | Src:MaD:1988 | -| DotRegexServlet.java:57:19:57:41 | getRequestURI(...) : String | DotRegexServlet.java:59:21:59:26 | source | provenance | Src:MaD:44674 | +| DotRegexServlet.java:57:19:57:41 | getRequestURI(...) : String | DotRegexServlet.java:59:21:59:26 | source | provenance | Src:MaD:44672 | | DotRegexServlet.java:75:19:75:39 | getPathInfo(...) : String | DotRegexServlet.java:77:56:77:61 | source | provenance | Src:MaD:1986 | -| DotRegexServlet.java:75:19:75:39 | getPathInfo(...) : String | DotRegexServlet.java:77:56:77:61 | source | provenance | Src:MaD:44671 | +| DotRegexServlet.java:75:19:75:39 | getPathInfo(...) : String | DotRegexServlet.java:77:56:77:61 | source | provenance | Src:MaD:44669 | | DotRegexServlet.java:112:19:112:39 | getPathInfo(...) : String | DotRegexServlet.java:115:25:115:30 | source | provenance | Src:MaD:1986 | -| DotRegexServlet.java:112:19:112:39 | getPathInfo(...) : String | DotRegexServlet.java:115:25:115:30 | source | provenance | Src:MaD:44671 | +| DotRegexServlet.java:112:19:112:39 | getPathInfo(...) : String | DotRegexServlet.java:115:25:115:30 | source | provenance | Src:MaD:44669 | | DotRegexSpring.java:20:26:20:50 | path : String | DotRegexSpring.java:22:21:22:24 | path : String | provenance | | | DotRegexSpring.java:22:10:22:25 | decodePath(...) : String | DotRegexSpring.java:23:25:23:28 | path | provenance | | | DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:22:10:22:25 | decodePath(...) : String | provenance | | @@ -21,7 +21,7 @@ edges | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | provenance | | | DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:71:29:71:32 | path : String | provenance | | | DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:73:10:73:13 | path : String | provenance | | -| DotRegexSpring.java:71:29:71:32 | path : String | DotRegexSpring.java:71:11:71:42 | decode(...) : String | provenance | MaD:42995 | +| DotRegexSpring.java:71:29:71:32 | path : String | DotRegexSpring.java:71:11:71:42 | decode(...) : String | provenance | MaD:42993 | nodes | DotRegexFilter.java:29:19:29:43 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String | | DotRegexFilter.java:32:25:32:30 | source | semmle.label | source | diff --git a/java/ql/test/experimental/query-tests/security/CWE-652/XQueryInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-652/XQueryInjection.expected index 6a633f6e3d6d..220f82d136dd 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-652/XQueryInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-652/XQueryInjection.expected @@ -1,31 +1,31 @@ edges -| XQueryInjection.java:45:23:45:50 | getParameter(...) : String | XQueryInjection.java:50:60:50:64 | query : String | provenance | Src:MaD:44686 | +| XQueryInjection.java:45:23:45:50 | getParameter(...) : String | XQueryInjection.java:50:60:50:64 | query : String | provenance | Src:MaD:44684 | | XQueryInjection.java:50:37:50:65 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:51:35:51:38 | xqpe | provenance | | | XQueryInjection.java:50:60:50:64 | query : String | XQueryInjection.java:50:37:50:65 | prepareExpression(...) : XQPreparedExpression | provenance | Config | -| XQueryInjection.java:59:23:59:50 | getParameter(...) : String | XQueryInjection.java:65:53:65:57 | query | provenance | Src:MaD:44686 | +| XQueryInjection.java:59:23:59:50 | getParameter(...) : String | XQueryInjection.java:65:53:65:57 | query | provenance | Src:MaD:44684 | | XQueryInjection.java:73:32:73:59 | nameStr : String | XQueryInjection.java:78:60:78:64 | query : String | provenance | | | XQueryInjection.java:78:37:78:65 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:79:35:79:38 | xqpe | provenance | | | XQueryInjection.java:78:60:78:64 | query : String | XQueryInjection.java:78:37:78:65 | prepareExpression(...) : XQPreparedExpression | provenance | Config | | XQueryInjection.java:86:33:86:60 | nameStr : String | XQueryInjection.java:92:53:92:57 | query | provenance | | -| XQueryInjection.java:100:28:100:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:103:60:103:63 | name : ServletInputStream | provenance | Src:MaD:44685 | +| XQueryInjection.java:100:28:100:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:103:60:103:63 | name : ServletInputStream | provenance | Src:MaD:44683 | | XQueryInjection.java:103:37:103:64 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:104:35:104:38 | xqpe | provenance | | | XQueryInjection.java:103:60:103:63 | name : ServletInputStream | XQueryInjection.java:103:37:103:64 | prepareExpression(...) : XQPreparedExpression | provenance | Config | -| XQueryInjection.java:112:28:112:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:116:53:116:56 | name | provenance | Src:MaD:44685 | -| XQueryInjection.java:124:28:124:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:125:70:125:73 | name : ServletInputStream | provenance | Src:MaD:44685 | +| XQueryInjection.java:112:28:112:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:116:53:116:56 | name | provenance | Src:MaD:44683 | +| XQueryInjection.java:124:28:124:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:125:70:125:73 | name : ServletInputStream | provenance | Src:MaD:44683 | | XQueryInjection.java:125:29:125:75 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:128:60:128:61 | br : BufferedReader | provenance | | -| XQueryInjection.java:125:48:125:74 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:125:29:125:75 | new BufferedReader(...) : BufferedReader | provenance | MaD:42600 | -| XQueryInjection.java:125:70:125:73 | name : ServletInputStream | XQueryInjection.java:125:48:125:74 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42634 | +| XQueryInjection.java:125:48:125:74 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:125:29:125:75 | new BufferedReader(...) : BufferedReader | provenance | MaD:42601 | +| XQueryInjection.java:125:70:125:73 | name : ServletInputStream | XQueryInjection.java:125:48:125:74 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42635 | | XQueryInjection.java:128:37:128:62 | prepareExpression(...) : XQPreparedExpression | XQueryInjection.java:129:35:129:38 | xqpe | provenance | | | XQueryInjection.java:128:60:128:61 | br : BufferedReader | XQueryInjection.java:128:37:128:62 | prepareExpression(...) : XQPreparedExpression | provenance | Config | -| XQueryInjection.java:137:28:137:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:138:70:138:73 | name : ServletInputStream | provenance | Src:MaD:44685 | +| XQueryInjection.java:137:28:137:51 | getInputStream(...) : ServletInputStream | XQueryInjection.java:138:70:138:73 | name : ServletInputStream | provenance | Src:MaD:44683 | | XQueryInjection.java:138:29:138:75 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:142:53:142:54 | br | provenance | | -| XQueryInjection.java:138:48:138:74 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:138:29:138:75 | new BufferedReader(...) : BufferedReader | provenance | MaD:42600 | -| XQueryInjection.java:138:70:138:73 | name : ServletInputStream | XQueryInjection.java:138:48:138:74 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42634 | -| XQueryInjection.java:150:23:150:50 | getParameter(...) : String | XQueryInjection.java:155:29:155:32 | name | provenance | Src:MaD:44686 | -| XQueryInjection.java:157:26:157:49 | getInputStream(...) : ServletInputStream | XQueryInjection.java:158:70:158:71 | is : ServletInputStream | provenance | Src:MaD:44685 | +| XQueryInjection.java:138:48:138:74 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:138:29:138:75 | new BufferedReader(...) : BufferedReader | provenance | MaD:42601 | +| XQueryInjection.java:138:70:138:73 | name : ServletInputStream | XQueryInjection.java:138:48:138:74 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42635 | +| XQueryInjection.java:150:23:150:50 | getParameter(...) : String | XQueryInjection.java:155:29:155:32 | name | provenance | Src:MaD:44684 | +| XQueryInjection.java:157:26:157:49 | getInputStream(...) : ServletInputStream | XQueryInjection.java:158:70:158:71 | is : ServletInputStream | provenance | Src:MaD:44683 | | XQueryInjection.java:158:29:158:73 | new BufferedReader(...) : BufferedReader | XQueryInjection.java:159:29:159:30 | br | provenance | | -| XQueryInjection.java:158:48:158:72 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:158:29:158:73 | new BufferedReader(...) : BufferedReader | provenance | MaD:42600 | -| XQueryInjection.java:158:70:158:71 | is : ServletInputStream | XQueryInjection.java:158:48:158:72 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42634 | +| XQueryInjection.java:158:48:158:72 | new InputStreamReader(...) : InputStreamReader | XQueryInjection.java:158:29:158:73 | new BufferedReader(...) : BufferedReader | provenance | MaD:42601 | +| XQueryInjection.java:158:70:158:71 | is : ServletInputStream | XQueryInjection.java:158:48:158:72 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42635 | nodes | XQueryInjection.java:45:23:45:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | | XQueryInjection.java:50:37:50:65 | prepareExpression(...) : XQPreparedExpression | semmle.label | prepareExpression(...) : XQPreparedExpression | diff --git a/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected b/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected index 98fbd10decff..da42cb7a3eff 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-759/HashWithoutSalt.expected @@ -1,9 +1,9 @@ edges -| HashWithoutSalt.java:10:36:10:43 | password : String | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | provenance | MaD:42758 | -| HashWithoutSalt.java:25:13:25:20 | password : String | HashWithoutSalt.java:25:13:25:31 | getBytes(...) | provenance | MaD:42758 | -| HashWithoutSalt.java:93:22:93:29 | password : String | HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | provenance | MaD:42758 | +| HashWithoutSalt.java:10:36:10:43 | password : String | HashWithoutSalt.java:10:36:10:54 | getBytes(...) | provenance | MaD:42756 | +| HashWithoutSalt.java:25:13:25:20 | password : String | HashWithoutSalt.java:25:13:25:31 | getBytes(...) | provenance | MaD:42756 | +| HashWithoutSalt.java:93:22:93:29 | password : String | HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | provenance | MaD:42756 | | HashWithoutSalt.java:93:22:93:40 | getBytes(...) : byte[] | HashWithoutSalt.java:94:17:94:25 | passBytes | provenance | | -| HashWithoutSalt.java:111:22:111:29 | password : String | HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | provenance | MaD:42758 | +| HashWithoutSalt.java:111:22:111:29 | password : String | HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | provenance | MaD:42756 | | HashWithoutSalt.java:111:22:111:40 | getBytes(...) : byte[] | HashWithoutSalt.java:112:18:112:26 | passBytes | provenance | | nodes | HashWithoutSalt.java:10:36:10:43 | password : String | semmle.label | password : String | diff --git a/java/ql/test/library-tests/dataflow/local-additional-taint/localAdditionalTaintStep.expected b/java/ql/test/library-tests/dataflow/local-additional-taint/localAdditionalTaintStep.expected index b55cd7f9a5ce..049d43efa902 100644 --- a/java/ql/test/library-tests/dataflow/local-additional-taint/localAdditionalTaintStep.expected +++ b/java/ql/test/library-tests/dataflow/local-additional-taint/localAdditionalTaintStep.expected @@ -12,4 +12,3 @@ | Test.java:28:34:28:40 | string2 | Test.java:28:13:28:41 | encode(...) | | Test.java:30:30:30:35 | bytes2 | Test.java:30:12:30:36 | encode(...) | | Test.java:31:30:31:35 | bytes2 | Test.java:31:12:31:36 | decode(...) | -| Test.java:33:18:33:21 | date | Test.java:33:18:33:29 | clone(...) | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected index 3ed36731596a..0d803b797689 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected @@ -1,12 +1,12 @@ edges | Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42747 | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42938 MaD:42628 | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42745 | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42936 MaD:42629 | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | | Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43697 | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43695 | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | nodes diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected index 8e54c8c37f51..4f4cdf9b38b3 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected @@ -1,16 +1,16 @@ edges | Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42747 | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42938 MaD:42628 | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42745 | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42936 MaD:42629 | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | | Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43697 | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43695 | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | Src:MaD:1 Sink:MaD:43211 | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | Src:MaD:1 Sink:MaD:43697 | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | Src:MaD:1 Sink:MaD:43209 | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | Src:MaD:1 Sink:MaD:43695 | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected index 3861bd2efeb4..ffee8171b896 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected @@ -1,26 +1,26 @@ edges | Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42747 | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42938 MaD:42628 | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42745 | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42936 MaD:42629 | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | | Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43697 | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43695 | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | Src:MaD:1 Sink:MaD:43211 | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | Src:MaD:1 Sink:MaD:43697 | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | Src:MaD:2 Sink:MaD:43211 | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | Src:MaD:2 Sink:MaD:43697 | -| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | MaD:42628 | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | Src:MaD:1 Sink:MaD:43209 | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | Src:MaD:1 Sink:MaD:43695 | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | Src:MaD:2 Sink:MaD:43209 | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | Src:MaD:2 Sink:MaD:43695 | +| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | MaD:42629 | | Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | provenance | | | Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | provenance | | -| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | provenance | | | Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | Sink:MaD:43697 | +| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | Sink:MaD:43695 | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected index 58cf47445eef..874ae1515ab6 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected @@ -1,28 +1,28 @@ edges | Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42747 | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42938 MaD:42628 | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42745 | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42936 MaD:42629 | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | | Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43697 | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43695 | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | Src:MaD:1 Sink:MaD:43211 | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | Src:MaD:1 Sink:MaD:43697 | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | Src:MaD:2 Sink:MaD:43211 | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | Src:MaD:2 Sink:MaD:43697 | -| Test.java:52:21:52:47 | getCustom(...) : String | Test.java:55:26:55:68 | ... + ... | provenance | Src:MaD:3 Sink:MaD:43211 | -| Test.java:52:21:52:47 | getCustom(...) : String | Test.java:58:36:58:41 | result | provenance | Src:MaD:3 Sink:MaD:43697 | -| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | MaD:42628 | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | Src:MaD:1 Sink:MaD:43209 | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | Src:MaD:1 Sink:MaD:43695 | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | Src:MaD:2 Sink:MaD:43209 | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | Src:MaD:2 Sink:MaD:43695 | +| Test.java:52:21:52:47 | getCustom(...) : String | Test.java:55:26:55:68 | ... + ... | provenance | Src:MaD:3 Sink:MaD:43209 | +| Test.java:52:21:52:47 | getCustom(...) : String | Test.java:58:36:58:41 | result | provenance | Src:MaD:3 Sink:MaD:43695 | +| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | MaD:42629 | | Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | provenance | | | Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | provenance | | -| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | provenance | | | Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | Sink:MaD:43697 | +| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | Sink:MaD:43695 | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected index cc892367abae..336585d3cb67 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected @@ -1,24 +1,24 @@ edges | Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42747 | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42938 MaD:42628 | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42745 | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42936 MaD:42629 | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | | Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43697 | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43695 | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | Src:MaD:3 Sink:MaD:43211 | -| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | Src:MaD:3 Sink:MaD:43697 | -| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | MaD:42628 | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:44:26:44:68 | ... + ... | provenance | Src:MaD:3 Sink:MaD:43209 | +| Test.java:41:21:41:49 | readEnv(...) : String | Test.java:47:36:47:41 | result | provenance | Src:MaD:3 Sink:MaD:43695 | +| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | MaD:42629 | | Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | provenance | | | Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | provenance | | -| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | provenance | | | Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | Sink:MaD:43697 | +| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | Sink:MaD:43695 | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected index 02d80fdb6628..dc25511be360 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected @@ -1,24 +1,24 @@ edges | Test.java:10:31:10:41 | data : byte[] | Test.java:11:23:11:26 | data : byte[] | provenance | | -| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42747 | -| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42938 MaD:42628 | +| Test.java:11:23:11:26 | data : byte[] | Test.java:11:12:11:51 | new String(...) : String | provenance | MaD:42745 | +| Test.java:19:5:19:25 | getInputStream(...) : InputStream | Test.java:19:32:19:35 | data [post update] : byte[] | provenance | Src:MaD:42936 MaD:42629 | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:22:49:22:52 | data : byte[] | provenance | | | Test.java:19:32:19:35 | data [post update] : byte[] | Test.java:25:69:25:72 | data : byte[] | provenance | | | Test.java:22:49:22:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43697 | -| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:22:49:22:52 | data : byte[] | Test.java:22:36:22:53 | byteToString(...) | provenance | Sink:MaD:43695 | +| Test.java:25:56:25:73 | byteToString(...) : String | Test.java:25:26:25:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:25:69:25:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:25:69:25:72 | data : byte[] | Test.java:25:56:25:73 | byteToString(...) : String | provenance | | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | Src:MaD:2 Sink:MaD:43211 | -| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | Src:MaD:2 Sink:MaD:43697 | -| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | MaD:42628 | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:33:26:33:68 | ... + ... | provenance | Src:MaD:2 Sink:MaD:43209 | +| Test.java:30:21:30:61 | executeQuery(...) : String | Test.java:36:36:36:41 | result | provenance | Src:MaD:2 Sink:MaD:43695 | +| Test.java:64:5:64:13 | System.in : InputStream | Test.java:64:20:64:23 | data [post update] : byte[] | provenance | MaD:42629 | | Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:67:69:67:72 | data : byte[] | provenance | | | Test.java:64:20:64:23 | data [post update] : byte[] | Test.java:70:49:70:52 | data : byte[] | provenance | | -| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | Sink:MaD:43211 | +| Test.java:67:56:67:73 | byteToString(...) : String | Test.java:67:26:67:80 | ... + ... | provenance | Sink:MaD:43209 | | Test.java:67:69:67:72 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | | Test.java:67:69:67:72 | data : byte[] | Test.java:67:56:67:73 | byteToString(...) : String | provenance | | | Test.java:70:49:70:52 | data : byte[] | Test.java:10:31:10:41 | data : byte[] | provenance | | -| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | Sink:MaD:43697 | +| Test.java:70:49:70:52 | data : byte[] | Test.java:70:36:70:53 | byteToString(...) | provenance | Sink:MaD:43695 | nodes | Test.java:10:31:10:41 | data : byte[] | semmle.label | data : byte[] | | Test.java:11:12:11:51 | new String(...) : String | semmle.label | new String(...) : String | diff --git a/java/ql/test/library-tests/frameworks/JaxWs/JakartaRsFlow.java b/java/ql/test/library-tests/frameworks/JaxWs/JakartaRsFlow.java index cbc8b36b066a..2c9a76a33651 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/JakartaRsFlow.java +++ b/java/ql/test/library-tests/frameworks/JaxWs/JakartaRsFlow.java @@ -84,7 +84,7 @@ void testResponseBuilder(MultivaluedMap multivaluedMap, List())); // $ hasValueFlow sink(ResponseBuilderSource.taint().cacheControl(new CacheControl())); // $ hasValueFlow - sink(ResponseBuilderSource.taint().clone()); // $ hasTaintFlow + sink(ResponseBuilderSource.taint().clone()); // $ hasValueFlow sink(ResponseBuilderSource.taint().contentLocation(new URI(""))); // $ hasValueFlow sink(ResponseBuilderSource.taint().cookie()); // $ hasValueFlow sink(ResponseBuilderSource.taint().encoding("")); // $ hasValueFlow diff --git a/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.java b/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.java index b7fa3261b0c1..8ac1bef73a16 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.java +++ b/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.java @@ -84,7 +84,7 @@ void testResponseBuilder(MultivaluedMap multivaluedMap, List())); // $ hasValueFlow sink(ResponseBuilderSource.taint().cacheControl(new CacheControl())); // $ hasValueFlow - sink(ResponseBuilderSource.taint().clone()); // $ hasTaintFlow + sink(ResponseBuilderSource.taint().clone()); // $ hasValueFlow sink(ResponseBuilderSource.taint().contentLocation(new URI(""))); // $ hasValueFlow sink(ResponseBuilderSource.taint().cookie()); // $ hasValueFlow sink(ResponseBuilderSource.taint().encoding("")); // $ hasValueFlow @@ -416,4 +416,4 @@ void testUriBuilder() throws Exception { class Dummy { private static Set foo() { return null; } -} \ No newline at end of file +} diff --git a/java/ql/test/library-tests/frameworks/JaxWs/UrlRedirect.expected b/java/ql/test/library-tests/frameworks/JaxWs/UrlRedirect.expected index e0b4f6309fd2..2943b00729fa 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/UrlRedirect.expected +++ b/java/ql/test/library-tests/frameworks/JaxWs/UrlRedirect.expected @@ -1,8 +1,8 @@ edges -| UrlRedirectJakarta.java:10:32:10:61 | getParameter(...) : String | UrlRedirectJakarta.java:10:24:10:62 | new URI(...) | provenance | Src:MaD:44686 MaD:42973 Sink:MaD:42370 | -| UrlRedirectJakarta.java:13:41:13:70 | getParameter(...) : String | UrlRedirectJakarta.java:13:33:13:71 | new URI(...) | provenance | Src:MaD:44686 MaD:42973 Sink:MaD:42371 | -| UrlRedirectJax.java:10:32:10:61 | getParameter(...) : String | UrlRedirectJax.java:10:24:10:62 | new URI(...) | provenance | Src:MaD:44686 MaD:42973 Sink:MaD:44715 | -| UrlRedirectJax.java:13:41:13:70 | getParameter(...) : String | UrlRedirectJax.java:13:33:13:71 | new URI(...) | provenance | Src:MaD:44686 MaD:42973 Sink:MaD:44716 | +| UrlRedirectJakarta.java:10:32:10:61 | getParameter(...) : String | UrlRedirectJakarta.java:10:24:10:62 | new URI(...) | provenance | Src:MaD:44684 MaD:42971 Sink:MaD:42371 | +| UrlRedirectJakarta.java:13:41:13:70 | getParameter(...) : String | UrlRedirectJakarta.java:13:33:13:71 | new URI(...) | provenance | Src:MaD:44684 MaD:42971 Sink:MaD:42372 | +| UrlRedirectJax.java:10:32:10:61 | getParameter(...) : String | UrlRedirectJax.java:10:24:10:62 | new URI(...) | provenance | Src:MaD:44684 MaD:42971 Sink:MaD:44713 | +| UrlRedirectJax.java:13:41:13:70 | getParameter(...) : String | UrlRedirectJax.java:13:33:13:71 | new URI(...) | provenance | Src:MaD:44684 MaD:42971 Sink:MaD:44714 | nodes | UrlRedirectJakarta.java:10:24:10:62 | new URI(...) | semmle.label | new URI(...) | | UrlRedirectJakarta.java:10:32:10:61 | getParameter(...) : String | semmle.label | getParameter(...) : String | diff --git a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/ApacheCommonsIoTest/GeneratedVsManualCoverage.expected b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/ApacheCommonsIoTest/GeneratedVsManualCoverage.expected index 2ce20c00cb4c..813ba5bfd12b 100644 --- a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/ApacheCommonsIoTest/GeneratedVsManualCoverage.expected +++ b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/ApacheCommonsIoTest/GeneratedVsManualCoverage.expected @@ -1 +1 @@ -| org.apache.commons.io | 14 | 1 | 1 | 2 | 18 | 0.8888888888888888 | 0.8333333333333334 | 0.1111111111111111 | 0.5 | 0.06666666666666667 | 0.16666666666666666 | +| org.apache.commons.io | 13 | 2 | 1 | 2 | 18 | 0.8888888888888888 | 0.8333333333333334 | 0.16666666666666666 | 0.6666666666666666 | 0.13333333333333333 | 0.2222222222222222 | diff --git a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/ApacheCommonsIoTest/IOUtils.java b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/ApacheCommonsIoTest/IOUtils.java index 0bd11f545ac5..64dc01108d4c 100644 --- a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/ApacheCommonsIoTest/IOUtils.java +++ b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/ApacheCommonsIoTest/IOUtils.java @@ -13,7 +13,6 @@ public static void readFully(InputStream input, byte[] buffer) throws IOExceptio public static byte[] readFully(InputStream input, int length) throws IOException { return null; } public static List readLines(InputStream input, String encoding) throws IOException { return null; } public static BufferedReader toBufferedReader(Reader reader) { return null; } - public static byte[] toByteArray(InputStream input, int size) throws IOException { return null; } public static char[] toCharArray(InputStream is, String encoding) throws IOException { return null; } public static InputStream toInputStream(String input, String encoding) throws IOException { return null; } public static String toString(InputStream input, String encoding) throws IOException { return null; } @@ -25,6 +24,7 @@ public static void writeChunked(char[] data, Writer output) throws IOException { // Both public static void writeLines(Collection lines, String lineEnding, Writer writer) throws IOException { } + public static byte[] toByteArray(InputStream input, int size) throws IOException { return null; } // No model public static void noSummary(String string) throws IOException { } diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/ZipSlip.expected b/java/ql/test/query-tests/security/CWE-022/semmle/tests/ZipSlip.expected index ae412e7bccb4..57429217102d 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/ZipSlip.expected +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/ZipSlip.expected @@ -1,9 +1,9 @@ edges | ZipTest.java:7:19:7:33 | getName(...) : String | ZipTest.java:8:31:8:34 | name : String | provenance | | -| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:9:48:9:51 | file | provenance | Sink:MaD:42556 | -| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:10:49:10:52 | file | provenance | Sink:MaD:42592 | -| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:11:36:11:39 | file | provenance | Sink:MaD:42564 | -| ZipTest.java:8:31:8:34 | name : String | ZipTest.java:8:17:8:35 | new File(...) : File | provenance | MaD:42613 | +| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:9:48:9:51 | file | provenance | Sink:MaD:42557 | +| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:10:49:10:52 | file | provenance | Sink:MaD:42593 | +| ZipTest.java:8:17:8:35 | new File(...) : File | ZipTest.java:11:36:11:39 | file | provenance | Sink:MaD:42565 | +| ZipTest.java:8:31:8:34 | name : String | ZipTest.java:8:17:8:35 | new File(...) : File | provenance | MaD:42614 | nodes | ZipTest.java:7:19:7:33 | getName(...) : String | semmle.label | getName(...) : String | | ZipTest.java:8:17:8:35 | new File(...) : File | semmle.label | new File(...) : File | diff --git a/java/ql/test/query-tests/security/CWE-078/ExecTainted.expected b/java/ql/test/query-tests/security/CWE-078/ExecTainted.expected index a53bdb9b6aaa..6e71e1544540 100644 --- a/java/ql/test/query-tests/security/CWE-078/ExecTainted.expected +++ b/java/ql/test/query-tests/security/CWE-078/ExecTainted.expected @@ -3,16 +3,16 @@ edges | Test.java:6:35:6:44 | arg : String | Test.java:10:61:10:73 | ... + ... : String | provenance | | | Test.java:6:35:6:44 | arg : String | Test.java:16:13:16:25 | ... + ... : String | provenance | | | Test.java:6:35:6:44 | arg : String | Test.java:22:15:22:27 | ... + ... : String | provenance | | -| Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | Test.java:7:25:7:70 | new ..[] { .. } | provenance | Sink:MaD:42681 | +| Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | Test.java:7:25:7:70 | new ..[] { .. } | provenance | Sink:MaD:42682 | | Test.java:7:44:7:69 | ... + ... : String | Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | provenance | | -| Test.java:10:29:10:74 | {...} : String[] [[]] : String | Test.java:10:29:10:74 | new String[] | provenance | Sink:MaD:42681 | +| Test.java:10:29:10:74 | {...} : String[] [[]] : String | Test.java:10:29:10:74 | new String[] | provenance | Sink:MaD:42682 | | Test.java:10:61:10:73 | ... + ... : String | Test.java:10:29:10:74 | {...} : String[] [[]] : String | provenance | | -| Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | Test.java:18:29:18:31 | cmd | provenance | Sink:MaD:42680 | -| Test.java:16:13:16:25 | ... + ... : String | Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | provenance | MaD:43746 | -| Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | Test.java:24:29:24:32 | cmd1 | provenance | Sink:MaD:42681 | +| Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | Test.java:18:29:18:31 | cmd | provenance | Sink:MaD:42681 | +| Test.java:16:13:16:25 | ... + ... : String | Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | provenance | MaD:43744 | +| Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | Test.java:24:29:24:32 | cmd1 | provenance | Sink:MaD:42682 | | Test.java:22:15:22:27 | ... + ... : String | Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | provenance | | | Test.java:28:38:28:47 | arg : String | Test.java:29:44:29:64 | ... + ... : String | provenance | | -| Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | Test.java:29:25:29:65 | new ..[] { .. } | provenance | Sink:MaD:42681 | +| Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | Test.java:29:25:29:65 | new ..[] { .. } | provenance | Sink:MaD:42682 | | Test.java:29:44:29:64 | ... + ... : String | Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | provenance | | | Test.java:57:27:57:39 | args : String[] | Test.java:60:20:60:22 | arg : String | provenance | | | Test.java:57:27:57:39 | args : String[] | Test.java:61:23:61:25 | arg : String | provenance | | diff --git a/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTainted.expected b/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTainted.expected index fbf202575eeb..6ce9fef80ce9 100644 --- a/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTainted.expected +++ b/java/ql/test/query-tests/security/CWE-089/semmle/examples/SqlTainted.expected @@ -2,18 +2,18 @@ edges | Mongo.java:10:29:10:41 | args : String[] | Mongo.java:17:56:17:66 | stringQuery : String | provenance | | | Mongo.java:10:29:10:41 | args : String[] | Mongo.java:21:49:21:52 | json | provenance | | | Mongo.java:17:56:17:66 | stringQuery : String | Mongo.java:17:45:17:67 | parse(...) | provenance | Config | -| Test.java:29:30:29:42 | args : String[] | Test.java:36:47:36:52 | query1 | provenance | Sink:MaD:43210 | -| Test.java:29:30:29:42 | args : String[] | Test.java:42:57:42:62 | query2 | provenance | Sink:MaD:43198 | -| Test.java:29:30:29:42 | args : String[] | Test.java:50:62:50:67 | query3 | provenance | Sink:MaD:43199 | +| Test.java:29:30:29:42 | args : String[] | Test.java:36:47:36:52 | query1 | provenance | Sink:MaD:43208 | +| Test.java:29:30:29:42 | args : String[] | Test.java:42:57:42:62 | query2 | provenance | Sink:MaD:43196 | +| Test.java:29:30:29:42 | args : String[] | Test.java:50:62:50:67 | query3 | provenance | Sink:MaD:43197 | | Test.java:29:30:29:42 | args : String[] | Test.java:58:19:58:26 | category : String | provenance | | -| Test.java:29:30:29:42 | args : String[] | Test.java:70:40:70:44 | query | provenance | Sink:MaD:43211 | -| Test.java:29:30:29:42 | args : String[] | Test.java:78:46:78:50 | query | provenance | Sink:MaD:43209 | +| Test.java:29:30:29:42 | args : String[] | Test.java:70:40:70:44 | query | provenance | Sink:MaD:43209 | +| Test.java:29:30:29:42 | args : String[] | Test.java:78:46:78:50 | query | provenance | Sink:MaD:43207 | | Test.java:58:4:58:10 | querySb [post update] : StringBuilder | Test.java:60:29:60:35 | querySb : StringBuilder | provenance | | -| Test.java:58:19:58:26 | category : String | Test.java:58:4:58:10 | querySb [post update] : StringBuilder | provenance | MaD:42711 | -| Test.java:60:29:60:35 | querySb : StringBuilder | Test.java:60:29:60:46 | toString(...) : String | provenance | MaD:42726 | -| Test.java:60:29:60:46 | toString(...) : String | Test.java:62:47:62:61 | querySbToString | provenance | Sink:MaD:43210 | -| Test.java:183:33:183:45 | args : String[] | Test.java:209:47:209:68 | queryWithUserTableName | provenance | Sink:MaD:43210 | -| Test.java:213:34:213:46 | args : String[] | Test.java:221:81:221:111 | ... + ... | provenance | Sink:MaD:43210 | +| Test.java:58:19:58:26 | category : String | Test.java:58:4:58:10 | querySb [post update] : StringBuilder | provenance | MaD:42712 | +| Test.java:60:29:60:35 | querySb : StringBuilder | Test.java:60:29:60:46 | toString(...) : String | provenance | MaD:42727 | +| Test.java:60:29:60:46 | toString(...) : String | Test.java:62:47:62:61 | querySbToString | provenance | Sink:MaD:43208 | +| Test.java:183:33:183:45 | args : String[] | Test.java:209:47:209:68 | queryWithUserTableName | provenance | Sink:MaD:43208 | +| Test.java:213:34:213:46 | args : String[] | Test.java:221:81:221:111 | ... + ... | provenance | Sink:MaD:43208 | | Test.java:227:26:227:38 | args : String[] | Test.java:228:11:228:14 | args : String[] | provenance | | | Test.java:227:26:227:38 | args : String[] | Test.java:232:14:232:17 | args : String[] | provenance | | | Test.java:227:26:227:38 | args : String[] | Test.java:233:15:233:18 | args : String[] | provenance | | diff --git a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected index 8e39e50ff518..5bc7b07286c7 100644 --- a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected +++ b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected @@ -1,20 +1,20 @@ edges -| LdapInjection.java:45:28:45:52 | jBad : String | LdapInjection.java:47:38:47:57 | ... + ... | provenance | Sink:MaD:44638 | -| LdapInjection.java:45:55:45:81 | jBadDN : String | LdapInjection.java:47:16:47:35 | ... + ... | provenance | Sink:MaD:44638 | -| LdapInjection.java:51:28:51:52 | jBad : String | LdapInjection.java:53:56:53:75 | ... + ... | provenance | Sink:MaD:44638 | +| LdapInjection.java:45:28:45:52 | jBad : String | LdapInjection.java:47:38:47:57 | ... + ... | provenance | Sink:MaD:44636 | +| LdapInjection.java:45:55:45:81 | jBadDN : String | LdapInjection.java:47:16:47:35 | ... + ... | provenance | Sink:MaD:44636 | +| LdapInjection.java:51:28:51:52 | jBad : String | LdapInjection.java:53:56:53:75 | ... + ... | provenance | Sink:MaD:44636 | | LdapInjection.java:51:55:51:85 | jBadDNName : String | LdapInjection.java:53:29:53:52 | ... + ... : String | provenance | | -| LdapInjection.java:53:29:53:52 | ... + ... : String | LdapInjection.java:53:16:53:53 | new LdapName(...) | provenance | Config Sink:MaD:44638 | -| LdapInjection.java:53:29:53:52 | ... + ... : String | LdapInjection.java:53:16:53:53 | new LdapName(...) | provenance | MaD:12746 Sink:MaD:44638 | -| LdapInjection.java:57:28:57:52 | jBad : String | LdapInjection.java:59:63:59:82 | ... + ... | provenance | Sink:MaD:44638 | -| LdapInjection.java:63:28:63:59 | jBadInitial : String | LdapInjection.java:65:29:65:55 | ... + ... | provenance | Sink:MaD:44638 | -| LdapInjection.java:69:28:69:52 | jBad : String | LdapInjection.java:71:84:71:103 | ... + ... | provenance | Sink:MaD:44638 | +| LdapInjection.java:53:29:53:52 | ... + ... : String | LdapInjection.java:53:16:53:53 | new LdapName(...) | provenance | Config Sink:MaD:44636 | +| LdapInjection.java:53:29:53:52 | ... + ... : String | LdapInjection.java:53:16:53:53 | new LdapName(...) | provenance | MaD:12746 Sink:MaD:44636 | +| LdapInjection.java:57:28:57:52 | jBad : String | LdapInjection.java:59:63:59:82 | ... + ... | provenance | Sink:MaD:44636 | +| LdapInjection.java:63:28:63:59 | jBadInitial : String | LdapInjection.java:65:29:65:55 | ... + ... | provenance | Sink:MaD:44636 | +| LdapInjection.java:69:28:69:52 | jBad : String | LdapInjection.java:71:84:71:103 | ... + ... | provenance | Sink:MaD:44636 | | LdapInjection.java:69:55:69:88 | jBadDNNameAdd : String | LdapInjection.java:71:53:71:79 | ... + ... : String | provenance | | -| LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | MaD:12895 Sink:MaD:44638 | +| LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | MaD:12895 Sink:MaD:44636 | | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | provenance | Config | -| LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | Config Sink:MaD:44638 | +| LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | Config Sink:MaD:44636 | | LdapInjection.java:71:53:71:79 | ... + ... : String | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | provenance | Config | | LdapInjection.java:71:53:71:79 | ... + ... : String | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | provenance | MaD:12746 | -| LdapInjection.java:75:28:75:52 | jBad : String | LdapInjection.java:79:47:79:66 | ... + ... | provenance | Sink:MaD:44638 | +| LdapInjection.java:75:28:75:52 | jBad : String | LdapInjection.java:79:47:79:66 | ... + ... | provenance | Sink:MaD:44636 | | LdapInjection.java:75:55:75:89 | jBadDNNameAdd2 : String | LdapInjection.java:78:30:78:57 | ... + ... : String | provenance | | | LdapInjection.java:78:5:78:8 | name : LdapName | LdapInjection.java:79:40:79:43 | name : LdapName | provenance | | | LdapInjection.java:78:5:78:8 | name [post update] : LdapName | LdapInjection.java:79:40:79:43 | name : LdapName | provenance | | @@ -24,23 +24,21 @@ edges | LdapInjection.java:78:17:78:68 | getRdns(...) : List | LdapInjection.java:78:5:78:8 | name [post update] : LdapName | provenance | MaD:12752 | | LdapInjection.java:78:30:78:57 | ... + ... : String | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | provenance | Config | | LdapInjection.java:78:30:78:57 | ... + ... : String | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | provenance | MaD:12746 | -| LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | MaD:12895 Sink:MaD:44638 | +| LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | MaD:12895 Sink:MaD:44636 | | LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | provenance | Config | -| LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | Config Sink:MaD:44638 | -| LdapInjection.java:83:28:83:52 | jBad : String | LdapInjection.java:85:75:85:94 | ... + ... | provenance | Sink:MaD:44638 | +| LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | Config Sink:MaD:44636 | +| LdapInjection.java:83:28:83:52 | jBad : String | LdapInjection.java:85:75:85:94 | ... + ... | provenance | Sink:MaD:44636 | | LdapInjection.java:83:55:83:93 | jBadDNNameToString : String | LdapInjection.java:85:29:85:60 | ... + ... : String | provenance | | -| LdapInjection.java:85:16:85:61 | new LdapName(...) : LdapName | LdapInjection.java:85:16:85:72 | toString(...) | provenance | Config Sink:MaD:44638 | +| LdapInjection.java:85:16:85:61 | new LdapName(...) : LdapName | LdapInjection.java:85:16:85:72 | toString(...) | provenance | Config Sink:MaD:44636 | | LdapInjection.java:85:29:85:60 | ... + ... : String | LdapInjection.java:85:16:85:61 | new LdapName(...) : LdapName | provenance | Config | | LdapInjection.java:85:29:85:60 | ... + ... : String | LdapInjection.java:85:16:85:61 | new LdapName(...) : LdapName | provenance | MaD:12746 | -| LdapInjection.java:89:28:89:52 | jBad : String | LdapInjection.java:91:76:91:95 | ... + ... | provenance | Sink:MaD:44638 | +| LdapInjection.java:89:28:89:52 | jBad : String | LdapInjection.java:91:76:91:95 | ... + ... | provenance | Sink:MaD:44636 | | LdapInjection.java:89:55:89:90 | jBadDNNameClone : String | LdapInjection.java:91:36:91:64 | ... + ... : String | provenance | | -| LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | LdapInjection.java:91:23:91:73 | clone(...) : Object | provenance | | -| LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | LdapInjection.java:91:23:91:73 | clone(...) : Object | provenance | Config | -| LdapInjection.java:91:23:91:73 | clone(...) : Object | LdapInjection.java:91:16:91:73 | (...)... | provenance | Sink:MaD:44638 | +| LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | LdapInjection.java:91:16:91:73 | (...)... | provenance | CloneStep Sink:MaD:44636 | | LdapInjection.java:91:36:91:64 | ... + ... : String | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | provenance | Config | | LdapInjection.java:91:36:91:64 | ... + ... : String | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | provenance | MaD:12746 | | LdapInjection.java:100:27:100:59 | jOkAttribute : String | LdapInjection.java:101:49:101:60 | jOkAttribute : String | provenance | | -| LdapInjection.java:101:49:101:60 | jOkAttribute : String | LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | provenance | MaD:12612 Sink:MaD:44638 | +| LdapInjection.java:101:49:101:60 | jOkAttribute : String | LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | provenance | MaD:12612 Sink:MaD:44636 | | LdapInjection.java:106:31:106:55 | uBad : String | LdapInjection.java:108:67:108:86 | ... + ... | provenance | Sink:MaD:1935 | | LdapInjection.java:106:58:106:84 | uBadDN : String | LdapInjection.java:108:20:108:39 | ... + ... | provenance | Sink:MaD:1935 | | LdapInjection.java:112:31:112:67 | uBadFilterCreate : String | LdapInjection.java:113:72:113:87 | uBadFilterCreate : String | provenance | | @@ -77,7 +75,7 @@ edges | LdapInjection.java:167:5:167:49 | create(...) : Filter | LdapInjection.java:167:70:167:70 | b : StringBuilder | provenance | Config | | LdapInjection.java:167:19:167:48 | uBadFilterCreateToStringBuffer : String | LdapInjection.java:167:5:167:49 | create(...) : Filter | provenance | Config | | LdapInjection.java:167:70:167:70 | b : StringBuilder | LdapInjection.java:168:58:168:58 | b : StringBuilder | provenance | | -| LdapInjection.java:168:58:168:58 | b : StringBuilder | LdapInjection.java:168:58:168:69 | toString(...) | provenance | MaD:42726 Sink:MaD:1935 | +| LdapInjection.java:168:58:168:58 | b : StringBuilder | LdapInjection.java:168:58:168:69 | toString(...) | provenance | MaD:42727 Sink:MaD:1935 | | LdapInjection.java:172:32:172:78 | uBadSearchRequestDuplicate : String | LdapInjection.java:175:9:175:50 | ... + ... : String | provenance | | | LdapInjection.java:174:23:175:51 | new SearchRequest(...) : SearchRequest | LdapInjection.java:176:14:176:14 | s : SearchRequest | provenance | | | LdapInjection.java:175:9:175:50 | ... + ... : String | LdapInjection.java:174:23:175:51 | new SearchRequest(...) : SearchRequest | provenance | Config | @@ -92,68 +90,68 @@ edges | LdapInjection.java:196:32:196:78 | uBadSearchRequestSetFilter : String | LdapInjection.java:199:17:199:42 | uBadSearchRequestSetFilter : String | provenance | | | LdapInjection.java:199:5:199:5 | s : SearchRequest | LdapInjection.java:200:14:200:14 | s | provenance | Sink:MaD:1933 | | LdapInjection.java:199:17:199:42 | uBadSearchRequestSetFilter : String | LdapInjection.java:199:5:199:5 | s : SearchRequest | provenance | Config | -| LdapInjection.java:229:30:229:54 | sBad : String | LdapInjection.java:230:36:230:55 | ... + ... | provenance | Sink:MaD:49364 | -| LdapInjection.java:229:57:229:83 | sBadDN : String | LdapInjection.java:230:14:230:33 | ... + ... | provenance | Sink:MaD:49364 | -| LdapInjection.java:234:30:234:54 | sBad : String | LdapInjection.java:235:88:235:107 | ... + ... | provenance | Sink:MaD:49354 | +| LdapInjection.java:229:30:229:54 | sBad : String | LdapInjection.java:230:36:230:55 | ... + ... | provenance | Sink:MaD:49370 | +| LdapInjection.java:229:57:229:83 | sBadDN : String | LdapInjection.java:230:14:230:33 | ... + ... | provenance | Sink:MaD:49370 | +| LdapInjection.java:234:30:234:54 | sBad : String | LdapInjection.java:235:88:235:107 | ... + ... | provenance | Sink:MaD:49360 | | LdapInjection.java:234:57:234:92 | sBadDNLNBuilder : String | LdapInjection.java:235:48:235:76 | ... + ... : String | provenance | | -| LdapInjection.java:235:20:235:77 | newInstance(...) : LdapNameBuilder | LdapInjection.java:235:20:235:85 | build(...) | provenance | Config Sink:MaD:49354 | +| LdapInjection.java:235:20:235:77 | newInstance(...) : LdapNameBuilder | LdapInjection.java:235:20:235:85 | build(...) | provenance | Config Sink:MaD:49360 | | LdapInjection.java:235:48:235:76 | ... + ... : String | LdapInjection.java:235:20:235:77 | newInstance(...) : LdapNameBuilder | provenance | Config | -| LdapInjection.java:239:30:239:54 | sBad : String | LdapInjection.java:240:100:240:119 | ... + ... | provenance | Sink:MaD:49366 | +| LdapInjection.java:239:30:239:54 | sBad : String | LdapInjection.java:240:100:240:119 | ... + ... | provenance | Sink:MaD:49372 | | LdapInjection.java:239:57:239:95 | sBadDNLNBuilderAdd : String | LdapInjection.java:240:57:240:88 | ... + ... : String | provenance | | -| LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | LdapInjection.java:240:23:240:97 | build(...) | provenance | Config Sink:MaD:49351 | -| LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | LdapInjection.java:240:23:240:97 | build(...) | provenance | Config Sink:MaD:49366 | +| LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | LdapInjection.java:240:23:240:97 | build(...) | provenance | Config Sink:MaD:49357 | +| LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | LdapInjection.java:240:23:240:97 | build(...) | provenance | Config Sink:MaD:49372 | | LdapInjection.java:240:57:240:88 | ... + ... : String | LdapInjection.java:240:23:240:89 | add(...) : LdapNameBuilder | provenance | Config | | LdapInjection.java:244:30:244:63 | sBadLdapQuery : String | LdapInjection.java:245:47:245:75 | ... + ... : String | provenance | | -| LdapInjection.java:245:47:245:75 | ... + ... : String | LdapInjection.java:245:15:245:76 | filter(...) | provenance | Config Sink:MaD:49363 | +| LdapInjection.java:245:47:245:75 | ... + ... : String | LdapInjection.java:245:15:245:76 | filter(...) | provenance | Config Sink:MaD:49369 | | LdapInjection.java:249:30:249:60 | sBadFilter : String | LdapInjection.java:250:86:250:111 | ... + ... : String | provenance | | | LdapInjection.java:249:63:249:98 | sBadDNLdapUtils : String | LdapInjection.java:250:34:250:62 | ... + ... : String | provenance | | -| LdapInjection.java:250:34:250:62 | ... + ... : String | LdapInjection.java:250:12:250:63 | newLdapName(...) | provenance | Config Sink:MaD:49362 | -| LdapInjection.java:250:86:250:111 | ... + ... : String | LdapInjection.java:250:66:250:112 | new HardcodedFilter(...) | provenance | Config Sink:MaD:49362 | +| LdapInjection.java:250:34:250:62 | ... + ... : String | LdapInjection.java:250:12:250:63 | newLdapName(...) | provenance | Config Sink:MaD:49368 | +| LdapInjection.java:250:86:250:111 | ... + ... : String | LdapInjection.java:250:66:250:112 | new HardcodedFilter(...) | provenance | Config Sink:MaD:49368 | | LdapInjection.java:254:30:254:63 | sBadLdapQuery : String | LdapInjection.java:255:56:255:84 | ... + ... : String | provenance | | -| LdapInjection.java:255:56:255:84 | ... + ... : String | LdapInjection.java:255:24:255:85 | filter(...) | provenance | Config Sink:MaD:49365 | +| LdapInjection.java:255:56:255:84 | ... + ... : String | LdapInjection.java:255:24:255:85 | filter(...) | provenance | Config Sink:MaD:49371 | | LdapInjection.java:259:30:259:64 | sBadLdapQuery2 : String | LdapInjection.java:260:51:260:80 | ... + ... : String | provenance | | -| LdapInjection.java:260:19:260:81 | filter(...) : LdapQuery | LdapInjection.java:261:24:261:24 | q | provenance | Sink:MaD:49365 | +| LdapInjection.java:260:19:260:81 | filter(...) : LdapQuery | LdapInjection.java:261:24:261:24 | q | provenance | Sink:MaD:49371 | | LdapInjection.java:260:51:260:80 | ... + ... : String | LdapInjection.java:260:19:260:81 | filter(...) : LdapQuery | provenance | Config | | LdapInjection.java:265:30:265:73 | sBadLdapQueryWithFilter : String | LdapInjection.java:266:76:266:114 | ... + ... : String | provenance | | -| LdapInjection.java:266:56:266:115 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:266:24:266:116 | filter(...) | provenance | Config Sink:MaD:49365 | +| LdapInjection.java:266:56:266:115 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:266:24:266:116 | filter(...) | provenance | Config Sink:MaD:49371 | | LdapInjection.java:266:76:266:114 | ... + ... : String | LdapInjection.java:266:56:266:115 | new HardcodedFilter(...) : HardcodedFilter | provenance | Config | | LdapInjection.java:270:30:270:74 | sBadLdapQueryWithFilter2 : String | LdapInjection.java:271:68:271:107 | ... + ... : String | provenance | | | LdapInjection.java:271:48:271:108 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:272:56:272:56 | f : HardcodedFilter | provenance | | | LdapInjection.java:271:68:271:107 | ... + ... : String | LdapInjection.java:271:48:271:108 | new HardcodedFilter(...) : HardcodedFilter | provenance | Config | -| LdapInjection.java:272:56:272:56 | f : HardcodedFilter | LdapInjection.java:272:24:272:57 | filter(...) | provenance | Config Sink:MaD:49365 | +| LdapInjection.java:272:56:272:56 | f : HardcodedFilter | LdapInjection.java:272:24:272:57 | filter(...) | provenance | Config Sink:MaD:49371 | | LdapInjection.java:276:31:276:68 | sBadLdapQueryBase : String | LdapInjection.java:277:42:277:58 | sBadLdapQueryBase : String | provenance | | -| LdapInjection.java:277:12:277:59 | base(...) : LdapQueryBuilder | LdapInjection.java:277:12:277:66 | base(...) | provenance | Config Sink:MaD:49362 | +| LdapInjection.java:277:12:277:59 | base(...) : LdapQueryBuilder | LdapInjection.java:277:12:277:66 | base(...) | provenance | Config Sink:MaD:49368 | | LdapInjection.java:277:42:277:58 | sBadLdapQueryBase : String | LdapInjection.java:277:12:277:59 | base(...) : LdapQueryBuilder | provenance | Config | | LdapInjection.java:281:31:281:71 | sBadLdapQueryComplex : String | LdapInjection.java:282:54:282:73 | sBadLdapQueryComplex : String | provenance | | | LdapInjection.java:282:24:282:74 | base(...) : LdapQueryBuilder | LdapInjection.java:282:24:282:87 | where(...) : ConditionCriteria | provenance | Config | -| LdapInjection.java:282:24:282:87 | where(...) : ConditionCriteria | LdapInjection.java:282:24:282:98 | is(...) | provenance | Config Sink:MaD:49365 | +| LdapInjection.java:282:24:282:87 | where(...) : ConditionCriteria | LdapInjection.java:282:24:282:98 | is(...) | provenance | Config Sink:MaD:49371 | | LdapInjection.java:282:54:282:73 | sBadLdapQueryComplex : String | LdapInjection.java:282:24:282:74 | base(...) : LdapQueryBuilder | provenance | Config | | LdapInjection.java:286:31:286:69 | sBadFilterToString : String | LdapInjection.java:287:38:287:71 | ... + ... : String | provenance | | -| LdapInjection.java:287:18:287:72 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:287:18:287:83 | toString(...) | provenance | Config Sink:MaD:49364 | +| LdapInjection.java:287:18:287:72 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:287:18:287:83 | toString(...) | provenance | Config Sink:MaD:49370 | | LdapInjection.java:287:38:287:71 | ... + ... : String | LdapInjection.java:287:18:287:72 | new HardcodedFilter(...) : HardcodedFilter | provenance | Config | | LdapInjection.java:291:31:291:67 | sBadFilterEncode : String | LdapInjection.java:293:25:293:56 | ... + ... : String | provenance | | | LdapInjection.java:293:5:293:57 | new HardcodedFilter(...) : HardcodedFilter | LdapInjection.java:293:66:293:66 | s : StringBuffer | provenance | Config | | LdapInjection.java:293:25:293:56 | ... + ... : String | LdapInjection.java:293:5:293:57 | new HardcodedFilter(...) : HardcodedFilter | provenance | Config | | LdapInjection.java:293:66:293:66 | s : StringBuffer | LdapInjection.java:294:18:294:18 | s : StringBuffer | provenance | | -| LdapInjection.java:294:18:294:18 | s : StringBuffer | LdapInjection.java:294:18:294:29 | toString(...) | provenance | MaD:42726 Sink:MaD:49364 | -| LdapInjection.java:314:30:314:54 | aBad : String | LdapInjection.java:316:36:316:55 | ... + ... | provenance | Sink:MaD:47456 | -| LdapInjection.java:314:57:314:83 | aBadDN : String | LdapInjection.java:316:14:316:33 | ... + ... | provenance | Sink:MaD:47456 | -| LdapInjection.java:320:30:320:54 | aBad : String | LdapInjection.java:322:65:322:84 | ... + ... | provenance | Sink:MaD:47456 | +| LdapInjection.java:294:18:294:18 | s : StringBuffer | LdapInjection.java:294:18:294:29 | toString(...) | provenance | MaD:42727 Sink:MaD:49370 | +| LdapInjection.java:314:30:314:54 | aBad : String | LdapInjection.java:316:36:316:55 | ... + ... | provenance | Sink:MaD:47462 | +| LdapInjection.java:314:57:314:83 | aBadDN : String | LdapInjection.java:316:14:316:33 | ... + ... | provenance | Sink:MaD:47462 | +| LdapInjection.java:320:30:320:54 | aBad : String | LdapInjection.java:322:65:322:84 | ... + ... | provenance | Sink:MaD:47462 | | LdapInjection.java:320:57:320:94 | aBadDNObjToString : String | LdapInjection.java:322:21:322:51 | ... + ... : String | provenance | | -| LdapInjection.java:322:14:322:52 | new Dn(...) : Dn | LdapInjection.java:322:14:322:62 | getName(...) | provenance | Config Sink:MaD:47456 | +| LdapInjection.java:322:14:322:52 | new Dn(...) : Dn | LdapInjection.java:322:14:322:62 | getName(...) | provenance | Config Sink:MaD:47462 | | LdapInjection.java:322:21:322:51 | ... + ... : String | LdapInjection.java:322:14:322:52 | new Dn(...) : Dn | provenance | Config | | LdapInjection.java:326:30:326:67 | aBadSearchRequest : String | LdapInjection.java:329:17:329:49 | ... + ... : String | provenance | | -| LdapInjection.java:329:5:329:5 | s : SearchRequestImpl | LdapInjection.java:330:14:330:14 | s | provenance | Sink:MaD:47456 | +| LdapInjection.java:329:5:329:5 | s : SearchRequestImpl | LdapInjection.java:330:14:330:14 | s | provenance | Sink:MaD:47462 | | LdapInjection.java:329:17:329:49 | ... + ... : String | LdapInjection.java:329:5:329:5 | s : SearchRequestImpl | provenance | Config | | LdapInjection.java:334:74:334:103 | aBadDNObj : String | LdapInjection.java:337:22:337:44 | ... + ... : String | provenance | | -| LdapInjection.java:337:5:337:5 | s : SearchRequestImpl | LdapInjection.java:338:14:338:14 | s | provenance | Sink:MaD:47456 | +| LdapInjection.java:337:5:337:5 | s : SearchRequestImpl | LdapInjection.java:338:14:338:14 | s | provenance | Sink:MaD:47462 | | LdapInjection.java:337:15:337:45 | new Dn(...) : Dn | LdapInjection.java:337:5:337:5 | s : SearchRequestImpl | provenance | Config | | LdapInjection.java:337:22:337:44 | ... + ... : String | LdapInjection.java:337:15:337:45 | new Dn(...) : Dn | provenance | Config | | LdapInjection.java:342:30:342:72 | aBadDNSearchRequestGet : String | LdapInjection.java:345:22:345:57 | ... + ... : String | provenance | | | LdapInjection.java:345:5:345:5 | s : SearchRequestImpl | LdapInjection.java:346:14:346:14 | s : SearchRequestImpl | provenance | | | LdapInjection.java:345:15:345:58 | new Dn(...) : Dn | LdapInjection.java:345:5:345:5 | s : SearchRequestImpl | provenance | Config | | LdapInjection.java:345:22:345:57 | ... + ... : String | LdapInjection.java:345:15:345:58 | new Dn(...) : Dn | provenance | Config | -| LdapInjection.java:346:14:346:14 | s : SearchRequestImpl | LdapInjection.java:346:14:346:24 | getBase(...) | provenance | Config Sink:MaD:47456 | +| LdapInjection.java:346:14:346:14 | s : SearchRequestImpl | LdapInjection.java:346:14:346:24 | getBase(...) | provenance | Config Sink:MaD:47462 | nodes | LdapInjection.java:45:28:45:52 | jBad : String | semmle.label | jBad : String | | LdapInjection.java:45:55:45:81 | jBadDN : String | semmle.label | jBadDN : String | @@ -196,7 +194,6 @@ nodes | LdapInjection.java:89:55:89:90 | jBadDNNameClone : String | semmle.label | jBadDNNameClone : String | | LdapInjection.java:91:16:91:73 | (...)... | semmle.label | (...)... | | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | -| LdapInjection.java:91:23:91:73 | clone(...) : Object | semmle.label | clone(...) : Object | | LdapInjection.java:91:36:91:64 | ... + ... : String | semmle.label | ... + ... : String | | LdapInjection.java:91:76:91:95 | ... + ... | semmle.label | ... + ... | | LdapInjection.java:100:27:100:59 | jOkAttribute : String | semmle.label | jOkAttribute : String | diff --git a/java/ql/test/query-tests/security/CWE-094/InsecureBeanValidation.expected b/java/ql/test/query-tests/security/CWE-094/InsecureBeanValidation.expected index 8da2d9994115..03403a1d4e26 100644 --- a/java/ql/test/query-tests/security/CWE-094/InsecureBeanValidation.expected +++ b/java/ql/test/query-tests/security/CWE-094/InsecureBeanValidation.expected @@ -1,5 +1,5 @@ edges -| InsecureBeanValidation.java:7:28:7:40 | object : String | InsecureBeanValidation.java:11:64:11:68 | value | provenance | Src:MaD:44703 Sink:MaD:44704 | +| InsecureBeanValidation.java:7:28:7:40 | object : String | InsecureBeanValidation.java:11:64:11:68 | value | provenance | Src:MaD:44701 Sink:MaD:44702 | nodes | InsecureBeanValidation.java:7:28:7:40 | object : String | semmle.label | object : String | | InsecureBeanValidation.java:11:64:11:68 | value | semmle.label | value | diff --git a/java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.expected b/java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.expected index 34fcd078eb73..d9ab1ff3d8bf 100644 --- a/java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.expected +++ b/java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.expected @@ -1,8 +1,8 @@ edges -| ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | ResponseSplitting.java:23:23:23:28 | cookie | provenance | Sink:MaD:44677 | -| ResponseSplitting.java:22:39:22:66 | getParameter(...) : String | ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | provenance | Src:MaD:44686 MaD:44684 | -| ResponseSplitting.java:53:14:53:48 | getParameter(...) : String | ResponseSplitting.java:59:27:59:27 | t : String | provenance | Src:MaD:44686 | -| ResponseSplitting.java:59:27:59:27 | t : String | ResponseSplitting.java:59:27:59:57 | replaceFirst(...) | provenance | MaD:42769 Sink:MaD:44680 | +| ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | ResponseSplitting.java:23:23:23:28 | cookie | provenance | Sink:MaD:44675 | +| ResponseSplitting.java:22:39:22:66 | getParameter(...) : String | ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | provenance | Src:MaD:44684 MaD:44682 | +| ResponseSplitting.java:53:14:53:48 | getParameter(...) : String | ResponseSplitting.java:59:27:59:27 | t : String | provenance | Src:MaD:44684 | +| ResponseSplitting.java:59:27:59:27 | t : String | ResponseSplitting.java:59:27:59:57 | replaceFirst(...) | provenance | MaD:42767 Sink:MaD:44678 | nodes | ResponseSplitting.java:22:20:22:67 | new Cookie(...) : Cookie | semmle.label | new Cookie(...) : Cookie | | ResponseSplitting.java:22:39:22:66 | getParameter(...) : String | semmle.label | getParameter(...) : String | diff --git a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstruction.expected b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstruction.expected index bc2b8b5f2498..def6934950fa 100644 --- a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstruction.expected +++ b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayConstruction.expected @@ -1,6 +1,6 @@ edges -| Test.java:76:27:76:60 | getProperty(...) : String | Test.java:78:37:78:48 | userProperty : String | provenance | Src:MaD:42708 | -| Test.java:78:37:78:48 | userProperty : String | Test.java:78:37:78:55 | trim(...) : String | provenance | MaD:42782 | +| Test.java:76:27:76:60 | getProperty(...) : String | Test.java:78:37:78:48 | userProperty : String | provenance | Src:MaD:42709 | +| Test.java:78:37:78:48 | userProperty : String | Test.java:78:37:78:55 | trim(...) : String | provenance | MaD:42780 | | Test.java:78:37:78:55 | trim(...) : String | Test.java:80:31:80:34 | size | provenance | TaintPreservingCallable | | Test.java:78:37:78:55 | trim(...) : String | Test.java:86:34:86:37 | size | provenance | TaintPreservingCallable | nodes diff --git a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndex.expected b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndex.expected index 5a75ea48ace8..39ce178baad9 100644 --- a/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndex.expected +++ b/java/ql/test/query-tests/security/CWE-129/semmle/tests/ImproperValidationOfArrayIndex.expected @@ -1,6 +1,6 @@ edges -| Test.java:14:27:14:60 | getProperty(...) : String | Test.java:16:38:16:49 | userProperty : String | provenance | Src:MaD:42708 | -| Test.java:16:38:16:49 | userProperty : String | Test.java:16:38:16:56 | trim(...) : String | provenance | MaD:42782 | +| Test.java:14:27:14:60 | getProperty(...) : String | Test.java:16:38:16:49 | userProperty : String | provenance | Src:MaD:42709 | +| Test.java:16:38:16:49 | userProperty : String | Test.java:16:38:16:56 | trim(...) : String | provenance | MaD:42780 | | Test.java:16:38:16:56 | trim(...) : String | Test.java:19:34:19:38 | index | provenance | TaintPreservingCallable | nodes | Test.java:14:27:14:60 | getProperty(...) : String | semmle.label | getProperty(...) : String | diff --git a/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatString.expected b/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatString.expected index b328b0034e12..8688795d3924 100644 --- a/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatString.expected +++ b/java/ql/test/query-tests/security/CWE-134/semmle/tests/ExternallyControlledFormatString.expected @@ -1,12 +1,12 @@ edges -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:19:19:19:30 | userProperty | provenance | Src:MaD:42708 | -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:21:23:21:34 | userProperty | provenance | Src:MaD:42708 Sink:MaD:42573 | -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:23:23:23:34 | userProperty | provenance | Src:MaD:42708 Sink:MaD:42576 | -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:25:28:25:39 | userProperty | provenance | Src:MaD:42708 | -| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:27:44:27:55 | userProperty | provenance | Src:MaD:42708 | -| Test.java:33:30:33:74 | getParameter(...) : String | Test.java:34:20:34:32 | userParameter : String | provenance | Src:MaD:44686 | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:19:19:19:30 | userProperty | provenance | Src:MaD:42709 | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:21:23:21:34 | userProperty | provenance | Src:MaD:42709 Sink:MaD:42574 | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:23:23:23:34 | userProperty | provenance | Src:MaD:42709 Sink:MaD:42577 | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:25:28:25:39 | userProperty | provenance | Src:MaD:42709 | +| Test.java:17:27:17:60 | getProperty(...) : String | Test.java:27:44:27:55 | userProperty | provenance | Src:MaD:42709 | +| Test.java:33:30:33:74 | getParameter(...) : String | Test.java:34:20:34:32 | userParameter : String | provenance | Src:MaD:44684 | | Test.java:34:20:34:32 | userParameter : String | Test.java:37:31:37:43 | format : String | provenance | | -| Test.java:37:31:37:43 | format : String | Test.java:39:25:39:30 | format | provenance | Sink:MaD:42573 | +| Test.java:37:31:37:43 | format : String | Test.java:39:25:39:30 | format | provenance | Sink:MaD:42574 | nodes | Test.java:17:27:17:60 | getProperty(...) : String | semmle.label | getProperty(...) : String | | Test.java:19:19:19:30 | userProperty | semmle.label | userProperty | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected index 93b6cb2f47f1..cc0e6cd0715f 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected @@ -1,18 +1,18 @@ edges | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | provenance | | | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | provenance | | -| ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42634 | -| ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42634 | +| ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42635 | +| ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42635 | | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | provenance | | | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | provenance | | -| ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | provenance | MaD:42600 | -| ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | provenance | MaD:42600 | -| ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | provenance | MaD:42601 | -| ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | provenance | MaD:42601 | +| ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | provenance | MaD:42601 | +| ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | ArithmeticTainted.java:18:21:18:57 | new BufferedReader(...) : BufferedReader | provenance | MaD:42601 | +| ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | provenance | MaD:42602 | +| ArithmeticTainted.java:19:26:19:39 | readerBuffered : BufferedReader | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | provenance | MaD:42602 | | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:21:29:21:40 | stringNumber : String | provenance | | | ArithmeticTainted.java:19:26:19:50 | readLine(...) : String | ArithmeticTainted.java:21:29:21:40 | stringNumber : String | provenance | | -| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | provenance | MaD:42782 | -| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | provenance | MaD:42782 | +| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | provenance | MaD:42780 | +| ArithmeticTainted.java:21:29:21:40 | stringNumber : String | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | provenance | MaD:42780 | | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:32:17:32:20 | data | provenance | TaintPreservingCallable | | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:40:17:40:20 | data | provenance | TaintPreservingCallable | | ArithmeticTainted.java:21:29:21:47 | trim(...) : String | ArithmeticTainted.java:50:17:50:20 | data | provenance | TaintPreservingCallable | diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure/TempDirLocalInformationDisclosure.expected b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure/TempDirLocalInformationDisclosure.expected index d0e0ecef607b..08d9f9e9d82d 100644 --- a/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure/TempDirLocalInformationDisclosure.expected +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure/TempDirLocalInformationDisclosure.expected @@ -1,59 +1,59 @@ edges | Files.java:10:24:10:69 | new File(...) : File | Files.java:14:37:14:43 | baseDir : File | provenance | | -| Files.java:10:33:10:68 | getProperty(...) : String | Files.java:10:24:10:69 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Files.java:14:28:14:64 | new File(...) : File | Files.java:15:17:15:23 | tempDir | provenance | Sink:MaD:42544 | -| Files.java:14:37:14:43 | baseDir : File | Files.java:14:28:14:64 | new File(...) : File | provenance | MaD:42612 | -| Test.java:36:24:36:69 | new File(...) : File | Test.java:39:63:39:69 | tempDir | provenance | Sink:MaD:42537 | -| Test.java:36:33:36:68 | getProperty(...) : String | Test.java:36:24:36:69 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:50:29:50:94 | new File(...) : File | Test.java:53:63:53:74 | tempDirChild | provenance | Sink:MaD:42537 | -| Test.java:50:38:50:83 | new File(...) : File | Test.java:50:29:50:94 | new File(...) : File | provenance | MaD:42612 | -| Test.java:50:47:50:82 | getProperty(...) : String | Test.java:50:38:50:83 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:61:24:61:69 | new File(...) : File | Test.java:61:24:61:88 | getCanonicalFile(...) : File | provenance | MaD:42616 | -| Test.java:61:24:61:88 | getCanonicalFile(...) : File | Test.java:64:63:64:69 | tempDir | provenance | Sink:MaD:42537 | -| Test.java:61:33:61:68 | getProperty(...) : String | Test.java:61:24:61:69 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:75:24:75:69 | new File(...) : File | Test.java:75:24:75:87 | getAbsoluteFile(...) : File | provenance | MaD:42614 | -| Test.java:75:24:75:87 | getAbsoluteFile(...) : File | Test.java:78:63:78:69 | tempDir | provenance | Sink:MaD:42537 | -| Test.java:75:33:75:68 | getProperty(...) : String | Test.java:75:24:75:69 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:110:29:110:84 | new File(...) : File | Test.java:113:9:113:20 | tempDirChild | provenance | Sink:MaD:42544 | -| Test.java:110:38:110:73 | getProperty(...) : String | Test.java:110:29:110:84 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:134:29:134:84 | new File(...) : File | Test.java:137:9:137:20 | tempDirChild | provenance | Sink:MaD:42545 | -| Test.java:134:38:134:73 | getProperty(...) : String | Test.java:134:29:134:84 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | +| Files.java:10:33:10:68 | getProperty(...) : String | Files.java:10:24:10:69 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Files.java:14:28:14:64 | new File(...) : File | Files.java:15:17:15:23 | tempDir | provenance | Sink:MaD:42545 | +| Files.java:14:37:14:43 | baseDir : File | Files.java:14:28:14:64 | new File(...) : File | provenance | MaD:42613 | +| Test.java:36:24:36:69 | new File(...) : File | Test.java:39:63:39:69 | tempDir | provenance | Sink:MaD:42538 | +| Test.java:36:33:36:68 | getProperty(...) : String | Test.java:36:24:36:69 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:50:29:50:94 | new File(...) : File | Test.java:53:63:53:74 | tempDirChild | provenance | Sink:MaD:42538 | +| Test.java:50:38:50:83 | new File(...) : File | Test.java:50:29:50:94 | new File(...) : File | provenance | MaD:42613 | +| Test.java:50:47:50:82 | getProperty(...) : String | Test.java:50:38:50:83 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:61:24:61:69 | new File(...) : File | Test.java:61:24:61:88 | getCanonicalFile(...) : File | provenance | MaD:42617 | +| Test.java:61:24:61:88 | getCanonicalFile(...) : File | Test.java:64:63:64:69 | tempDir | provenance | Sink:MaD:42538 | +| Test.java:61:33:61:68 | getProperty(...) : String | Test.java:61:24:61:69 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:75:24:75:69 | new File(...) : File | Test.java:75:24:75:87 | getAbsoluteFile(...) : File | provenance | MaD:42615 | +| Test.java:75:24:75:87 | getAbsoluteFile(...) : File | Test.java:78:63:78:69 | tempDir | provenance | Sink:MaD:42538 | +| Test.java:75:33:75:68 | getProperty(...) : String | Test.java:75:24:75:69 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:110:29:110:84 | new File(...) : File | Test.java:113:9:113:20 | tempDirChild | provenance | Sink:MaD:42545 | +| Test.java:110:38:110:73 | getProperty(...) : String | Test.java:110:29:110:84 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:134:29:134:84 | new File(...) : File | Test.java:137:9:137:20 | tempDirChild | provenance | Sink:MaD:42546 | +| Test.java:134:38:134:73 | getProperty(...) : String | Test.java:134:29:134:84 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | | Test.java:158:29:158:88 | new File(...) : File | Test.java:159:21:159:32 | tempDirChild : File | provenance | | -| Test.java:158:38:158:73 | getProperty(...) : String | Test.java:158:29:158:88 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:159:21:159:32 | tempDirChild : File | Test.java:159:21:159:41 | toPath(...) | provenance | MaD:42622 Sink:MaD:43044 | +| Test.java:158:38:158:73 | getProperty(...) : String | Test.java:158:29:158:88 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:159:21:159:32 | tempDirChild : File | Test.java:159:21:159:41 | toPath(...) | provenance | MaD:42623 Sink:MaD:43042 | | Test.java:187:29:187:88 | new File(...) : File | Test.java:188:21:188:32 | tempDirChild : File | provenance | | -| Test.java:187:38:187:73 | getProperty(...) : String | Test.java:187:29:187:88 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:188:21:188:32 | tempDirChild : File | Test.java:188:21:188:41 | toPath(...) | provenance | MaD:42622 Sink:MaD:43044 | -| Test.java:204:29:204:104 | new File(...) : File | Test.java:204:29:204:113 | toPath(...) : Path | provenance | MaD:42622 | -| Test.java:204:29:204:113 | toPath(...) : Path | Test.java:207:33:207:44 | tempDirChild | provenance | Sink:MaD:43034 | -| Test.java:204:38:204:73 | getProperty(...) : String | Test.java:204:29:204:104 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:216:29:216:102 | new File(...) : File | Test.java:216:29:216:111 | toPath(...) : Path | provenance | MaD:42622 | -| Test.java:216:29:216:111 | toPath(...) : Path | Test.java:219:31:219:42 | tempDirChild | provenance | Sink:MaD:43036 | -| Test.java:216:38:216:73 | getProperty(...) : String | Test.java:216:29:216:102 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | +| Test.java:187:38:187:73 | getProperty(...) : String | Test.java:187:29:187:88 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:188:21:188:32 | tempDirChild : File | Test.java:188:21:188:41 | toPath(...) | provenance | MaD:42623 Sink:MaD:43042 | +| Test.java:204:29:204:104 | new File(...) : File | Test.java:204:29:204:113 | toPath(...) : Path | provenance | MaD:42623 | +| Test.java:204:29:204:113 | toPath(...) : Path | Test.java:207:33:207:44 | tempDirChild | provenance | Sink:MaD:43032 | +| Test.java:204:38:204:73 | getProperty(...) : String | Test.java:204:29:204:104 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:216:29:216:102 | new File(...) : File | Test.java:216:29:216:111 | toPath(...) : Path | provenance | MaD:42623 | +| Test.java:216:29:216:111 | toPath(...) : Path | Test.java:219:31:219:42 | tempDirChild | provenance | Sink:MaD:43034 | +| Test.java:216:38:216:73 | getProperty(...) : String | Test.java:216:29:216:102 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | | Test.java:228:29:228:100 | new File(...) : File | Test.java:231:26:231:37 | tempDirChild : File | provenance | | -| Test.java:228:38:228:73 | getProperty(...) : String | Test.java:228:29:228:100 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:231:26:231:37 | tempDirChild : File | Test.java:231:26:231:46 | toPath(...) | provenance | MaD:42622 Sink:MaD:43019 | +| Test.java:228:38:228:73 | getProperty(...) : String | Test.java:228:29:228:100 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:231:26:231:37 | tempDirChild : File | Test.java:231:26:231:46 | toPath(...) | provenance | MaD:42623 Sink:MaD:43017 | | Test.java:249:29:249:101 | new File(...) : File | Test.java:252:31:252:42 | tempDirChild : File | provenance | | -| Test.java:249:38:249:73 | getProperty(...) : String | Test.java:249:29:249:101 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:252:31:252:42 | tempDirChild : File | Test.java:252:31:252:51 | toPath(...) | provenance | MaD:42622 Sink:MaD:43018 | +| Test.java:249:38:249:73 | getProperty(...) : String | Test.java:249:29:249:101 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:252:31:252:42 | tempDirChild : File | Test.java:252:31:252:51 | toPath(...) | provenance | MaD:42623 Sink:MaD:43016 | | Test.java:260:29:260:109 | new File(...) : File | Test.java:263:33:263:44 | tempDirChild : File | provenance | | -| Test.java:260:38:260:73 | getProperty(...) : String | Test.java:260:29:260:109 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:263:33:263:44 | tempDirChild : File | Test.java:263:33:263:53 | toPath(...) | provenance | MaD:42622 Sink:MaD:43017 | +| Test.java:260:38:260:73 | getProperty(...) : String | Test.java:260:29:260:109 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:263:33:263:44 | tempDirChild : File | Test.java:263:33:263:53 | toPath(...) | provenance | MaD:42623 Sink:MaD:43015 | | Test.java:294:29:294:101 | new File(...) : File | Test.java:298:35:298:46 | tempDirChild : File | provenance | | -| Test.java:294:38:294:73 | getProperty(...) : String | Test.java:294:29:294:101 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:298:35:298:46 | tempDirChild : File | Test.java:298:35:298:55 | toPath(...) | provenance | MaD:42622 Sink:MaD:43018 | +| Test.java:294:38:294:73 | getProperty(...) : String | Test.java:294:29:294:101 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:298:35:298:46 | tempDirChild : File | Test.java:298:35:298:55 | toPath(...) | provenance | MaD:42623 Sink:MaD:43016 | | Test.java:313:29:313:101 | new File(...) : File | Test.java:316:35:316:46 | tempDirChild : File | provenance | | -| Test.java:313:38:313:73 | getProperty(...) : String | Test.java:313:29:313:101 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:316:35:316:46 | tempDirChild : File | Test.java:316:35:316:55 | toPath(...) | provenance | MaD:42622 Sink:MaD:43018 | +| Test.java:313:38:313:73 | getProperty(...) : String | Test.java:313:29:313:101 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:316:35:316:46 | tempDirChild : File | Test.java:316:35:316:55 | toPath(...) | provenance | MaD:42623 Sink:MaD:43016 | | Test.java:322:29:322:101 | new File(...) : File | Test.java:326:35:326:46 | tempDirChild : File | provenance | | -| Test.java:322:38:322:73 | getProperty(...) : String | Test.java:322:29:322:101 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:326:35:326:46 | tempDirChild : File | Test.java:326:35:326:55 | toPath(...) | provenance | MaD:42622 Sink:MaD:43018 | +| Test.java:322:38:322:73 | getProperty(...) : String | Test.java:322:29:322:101 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:326:35:326:46 | tempDirChild : File | Test.java:326:35:326:55 | toPath(...) | provenance | MaD:42623 Sink:MaD:43016 | | Test.java:350:29:350:101 | new File(...) : File | Test.java:355:35:355:46 | tempDirChild : File | provenance | | -| Test.java:350:38:350:73 | getProperty(...) : String | Test.java:350:29:350:101 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:355:35:355:46 | tempDirChild : File | Test.java:355:35:355:55 | toPath(...) | provenance | MaD:42622 Sink:MaD:43018 | +| Test.java:350:38:350:73 | getProperty(...) : String | Test.java:350:29:350:101 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:355:35:355:46 | tempDirChild : File | Test.java:355:35:355:55 | toPath(...) | provenance | MaD:42623 Sink:MaD:43016 | | Test.java:361:29:361:101 | new File(...) : File | Test.java:366:35:366:46 | tempDirChild : File | provenance | | -| Test.java:361:38:361:73 | getProperty(...) : String | Test.java:361:29:361:101 | new File(...) : File | provenance | Src:MaD:42708 MaD:42612 | -| Test.java:366:35:366:46 | tempDirChild : File | Test.java:366:35:366:55 | toPath(...) | provenance | MaD:42622 Sink:MaD:43018 | +| Test.java:361:38:361:73 | getProperty(...) : String | Test.java:361:29:361:101 | new File(...) : File | provenance | Src:MaD:42709 MaD:42613 | +| Test.java:366:35:366:46 | tempDirChild : File | Test.java:366:35:366:55 | toPath(...) | provenance | MaD:42623 Sink:MaD:43016 | nodes | Files.java:10:24:10:69 | new File(...) : File | semmle.label | new File(...) : File | | Files.java:10:33:10:68 | getProperty(...) : String | semmle.label | getProperty(...) : String | diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/AndroidManifest.xml b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/AndroidManifest.xml index da5cdabce67c..ec7d7fc5aec8 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/AndroidManifest.xml +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/AndroidManifest.xml @@ -5,6 +5,12 @@ android:versionName="0.1" > + + + + + + - \ No newline at end of file + diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/AndroidManifest.xml b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/AndroidManifest.xml index da5cdabce67c..ec7d7fc5aec8 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/AndroidManifest.xml +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/AndroidManifest.xml @@ -5,6 +5,12 @@ android:versionName="0.1" > + + + + + + - \ No newline at end of file + diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/AndroidManifest.xml b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/AndroidManifest.xml index da5cdabce67c..ec7d7fc5aec8 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/AndroidManifest.xml +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/AndroidManifest.xml @@ -5,6 +5,12 @@ android:versionName="0.1" > + + + + + + - \ No newline at end of file + diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/AndroidManifest.xml b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/AndroidManifest.xml index da5cdabce67c..ec7d7fc5aec8 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/AndroidManifest.xml +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/AndroidManifest.xml @@ -5,6 +5,12 @@ android:versionName="0.1" > + + + + + + - \ No newline at end of file + diff --git a/java/ql/test/query-tests/security/CWE-297/UnsafeHostnameVerification.expected b/java/ql/test/query-tests/security/CWE-297/UnsafeHostnameVerification.expected index 1015bb43d5fa..3014a42c0c62 100644 --- a/java/ql/test/query-tests/security/CWE-297/UnsafeHostnameVerification.expected +++ b/java/ql/test/query-tests/security/CWE-297/UnsafeHostnameVerification.expected @@ -1,7 +1,7 @@ edges -| UnsafeHostnameVerification.java:66:37:80:9 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:81:55:81:62 | verifier | provenance | Sink:MaD:44646 | -| UnsafeHostnameVerification.java:88:37:93:9 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:94:55:94:62 | verifier | provenance | Sink:MaD:44646 | -| UnsafeHostnameVerification.java:97:42:97:68 | ALLOW_ALL_HOSTNAME_VERIFIER : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:34:59:34:85 | ALLOW_ALL_HOSTNAME_VERIFIER | provenance | Sink:MaD:44646 | +| UnsafeHostnameVerification.java:66:37:80:9 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:81:55:81:62 | verifier | provenance | Sink:MaD:44644 | +| UnsafeHostnameVerification.java:88:37:93:9 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:94:55:94:62 | verifier | provenance | Sink:MaD:44644 | +| UnsafeHostnameVerification.java:97:42:97:68 | ALLOW_ALL_HOSTNAME_VERIFIER : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:34:59:34:85 | ALLOW_ALL_HOSTNAME_VERIFIER | provenance | Sink:MaD:44644 | | UnsafeHostnameVerification.java:97:72:102:5 | new (...) : new HostnameVerifier(...) { ... } | UnsafeHostnameVerification.java:97:42:97:68 | ALLOW_ALL_HOSTNAME_VERIFIER : new HostnameVerifier(...) { ... } | provenance | | nodes | UnsafeHostnameVerification.java:14:55:19:9 | new (...) | semmle.label | new (...) | diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected index 1a095da351ab..e6f670fbb9c3 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected @@ -1,5 +1,5 @@ edges -| WeakHashing.java:21:86:21:90 | "MD5" : String | WeakHashing.java:21:56:21:91 | getProperty(...) | provenance | MaD:43996 | +| WeakHashing.java:21:86:21:90 | "MD5" : String | WeakHashing.java:21:56:21:91 | getProperty(...) | provenance | MaD:43994 | nodes | Test.java:19:45:19:49 | "DES" | semmle.label | "DES" | | Test.java:42:33:42:37 | "RC2" | semmle.label | "RC2" | diff --git a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected index 8ab08086ca8b..6b8a6a6620a9 100644 --- a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected +++ b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected @@ -1,10 +1,10 @@ edges -| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | provenance | Src:MaD:44686 | -| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:45:28:45:39 | input : String | provenance | Src:MaD:44686 | +| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | provenance | Src:MaD:44684 | +| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:45:28:45:39 | input : String | provenance | Src:MaD:44684 | | UrlRedirect.java:45:28:45:39 | input : String | UrlRedirect.java:46:10:46:14 | input : String | provenance | | -| UrlRedirect.java:46:10:46:14 | input : String | UrlRedirect.java:46:10:46:40 | replaceAll(...) : String | provenance | MaD:42767 | -| mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:31:14:38 | source(...) : String | provenance | Src:MaD:44686 | -| mad/Test.java:14:31:14:38 | source(...) : String | mad/Test.java:14:22:14:38 | (...)... | provenance | Sink:MaD:49014 | +| UrlRedirect.java:46:10:46:14 | input : String | UrlRedirect.java:46:10:46:40 | replaceAll(...) : String | provenance | MaD:42765 | +| mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:31:14:38 | source(...) : String | provenance | Src:MaD:44684 | +| mad/Test.java:14:31:14:38 | source(...) : String | mad/Test.java:14:22:14:38 | (...)... | provenance | Sink:MaD:49020 | nodes | UrlRedirect2.java:27:25:27:54 | getParameter(...) | semmle.label | getParameter(...) | | UrlRedirect.java:23:25:23:54 | getParameter(...) | semmle.label | getParameter(...) | diff --git a/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTainted.expected b/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTainted.expected index 0b05968b8c3e..fdca38d3d85b 100644 --- a/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTainted.expected +++ b/java/ql/test/query-tests/security/CWE-681/semmle/tests/NumericCastTainted.expected @@ -1,10 +1,10 @@ edges | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | Test.java:12:26:12:39 | readerBuffered : BufferedReader | provenance | | -| Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | provenance | MaD:42600 | -| Test.java:11:28:11:36 | System.in : InputStream | Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42634 | -| Test.java:12:26:12:39 | readerBuffered : BufferedReader | Test.java:12:26:12:50 | readLine(...) : String | provenance | MaD:42601 | +| Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | provenance | MaD:42601 | +| Test.java:11:28:11:36 | System.in : InputStream | Test.java:11:6:11:46 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:42635 | +| Test.java:12:26:12:39 | readerBuffered : BufferedReader | Test.java:12:26:12:50 | readLine(...) : String | provenance | MaD:42602 | | Test.java:12:26:12:50 | readLine(...) : String | Test.java:14:27:14:38 | stringNumber : String | provenance | | -| Test.java:14:27:14:38 | stringNumber : String | Test.java:14:27:14:45 | trim(...) : String | provenance | MaD:42782 | +| Test.java:14:27:14:38 | stringNumber : String | Test.java:14:27:14:45 | trim(...) : String | provenance | MaD:42780 | | Test.java:14:27:14:45 | trim(...) : String | Test.java:21:22:21:25 | data | provenance | TaintPreservingCallable | nodes | Test.java:10:36:11:47 | new BufferedReader(...) : BufferedReader | semmle.label | new BufferedReader(...) : BufferedReader | diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected index 6ea9a43be358..618c8d08ea2f 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/TaintedPermissionsCheck.expected @@ -1,5 +1,5 @@ edges -| TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | provenance | Src:MaD:44686 | +| TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | provenance | Src:MaD:44684 | nodes | TaintedPermissionsCheckTest.java:12:19:12:48 | getParameter(...) : String | semmle.label | getParameter(...) : String | | TaintedPermissionsCheckTest.java:15:27:15:53 | ... + ... | semmle.label | ... + ... | diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/diagnostics.expected b/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/diagnostics.expected index 72108d0ebb54..54ac43a4ad74 100644 --- a/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/diagnostics.expected +++ b/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/diagnostics.expected @@ -1,15 +1,14 @@ { - "timestamp": "2023-03-23T12:04:41.317+00:00", - "source": { - "id": "js/internal-error", - "name": "Internal error", - "extractorName": "javascript" - }, - "markdownMessage": "Internal error: com.semmle.util.exception.CatastrophicError: The TypeScript parser wrapper crashed with exit code 1", - "severity": "unknown", - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} \ No newline at end of file + "markdownMessage": "Internal error: com.semmle.util.exception.CatastrophicError: The TypeScript parser wrapper crashed with exit code 1", + "severity": "unknown", + "source": { + "extractorName": "javascript", + "id": "js/internal-error", + "name": "Internal error" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/test.py b/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/test.py index 3f6c33bf31c1..25a95e763ee8 100644 --- a/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/test.py +++ b/javascript/ql/integration-tests/all-platforms/diagnostics/internal-error/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="javascript", runFunction = runUnsuccessfully, db = None) - -check_diagnostics() +def test(codeql, javascript): + codeql.database.create(_assert_failure=True) diff --git a/javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/test.py b/javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/test.py index 886c058d8f5a..382607f69a73 100644 --- a/javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/test.py +++ b/javascript/ql/integration-tests/all-platforms/diagnostics/syntax-error/test.py @@ -1,7 +1,2 @@ -import os -from create_database_utils import * -from diagnostics_test_utils import * - -run_codeql_database_create([], lang="javascript", runFunction = runSuccessfully, db = None) - -check_diagnostics() +def test(codeql, javascript): + codeql.database.create() diff --git a/javascript/ql/integration-tests/all-platforms/no-types/test.py b/javascript/ql/integration-tests/all-platforms/no-types/test.py index 12ea27fbc0cc..2c3862227aa9 100755 --- a/javascript/ql/integration-tests/all-platforms/no-types/test.py +++ b/javascript/ql/integration-tests/all-platforms/no-types/test.py @@ -1,3 +1,2 @@ -from create_database_utils import * - -run_codeql_database_create([], lang="javascript", extra_args=["-Oskip_types=true"]) +def test(codeql, javascript): + codeql.database.create(extractor_option="skip_types=true") diff --git a/javascript/ql/integration-tests/all-platforms/qlpack.yml b/javascript/ql/integration-tests/all-platforms/qlpack.yml deleted file mode 100644 index 9f076584585a..000000000000 --- a/javascript/ql/integration-tests/all-platforms/qlpack.yml +++ /dev/null @@ -1,4 +0,0 @@ -dependencies: - codeql/javascript-all: '*' - codeql/javascript-queries: '*' -warnOnImplicitThis: true diff --git a/javascript/ql/integration-tests/legacy b/javascript/ql/integration-tests/legacy deleted file mode 100644 index 52478f0a7ef5..000000000000 --- a/javascript/ql/integration-tests/legacy +++ /dev/null @@ -1 +0,0 @@ -These tests are still run with the legacy test runner diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index c5df4d5fa276..182f9a9685c5 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.1 + +No user-facing changes. + ## 1.1.0 ### Major Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/1.1.1.md b/javascript/ql/lib/change-notes/released/1.1.1.md new file mode 100644 index 000000000000..7fb56d366105 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/1.1.1.md @@ -0,0 +1,3 @@ +## 1.1.1 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 2ac15439f561..1a19084be3f7 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 84f0ccaa3dbe..651f453bcede 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 1.1.0 +version: 1.1.1 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript @@ -16,4 +16,5 @@ dependencies: dataExtensions: - semmle/javascript/frameworks/**/model.yml - semmle/javascript/frameworks/**/*.model.yml + - semmle/javascript/security/domains/**/*.model.yml warnOnImplicitThis: true diff --git a/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.Required.Setting.model.yml b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.Required.Setting.model.yml new file mode 100644 index 000000000000..ab01ec5206df --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/frameworks/helmet/Helmet.Required.Setting.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/javascript-queries + extensible: requiredHelmetSecuritySetting + data: + - ["frameguard"] + - ["contentSecurityPolicy"] diff --git a/javascript/ql/lib/semmle/javascript/security/FunctionalityFromUntrustedSource.qll b/javascript/ql/lib/semmle/javascript/security/FunctionalityFromUntrustedSource.qll new file mode 100644 index 000000000000..f837c710fd46 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/security/FunctionalityFromUntrustedSource.qll @@ -0,0 +1,208 @@ +/** + * Provides classes for finding functionality that is loaded from untrusted sources and used in script or frame elements. + */ + +import javascript + +/** A location that adds a reference to an untrusted source. */ +abstract class AddsUntrustedUrl extends Locatable { + /** Gets an explanation why this source is untrusted. */ + abstract string getProblem(); + + /** Gets the URL of the untrusted source. */ + abstract string getUrl(); +} + +/** Looks for static creation of an element and source. */ +module StaticCreation { + /** Holds if `host` is an alias of localhost. */ + bindingset[host] + predicate isLocalhostPrefix(string host) { + host.toLowerCase() + .regexpMatch([ + "(?i)localhost(:[0-9]+)?/.*", "127.0.0.1(:[0-9]+)?/.*", "::1/.*", "\\[::1\\]:[0-9]+/.*" + ]) + } + + /** Holds if `url` is a url that is vulnerable to a MITM attack. */ + bindingset[url] + predicate isUntrustedSourceUrl(string url) { + exists(string hostPath | hostPath = url.regexpCapture("(?i)http://(.*)", 1) | + not isLocalhostPrefix(hostPath) + ) + } + + /** Holds if `url` refers to a CDN that needs an integrity check - even with https. */ + bindingset[url] + predicate isCdnUrlWithCheckingRequired(string url) { + // Some CDN URLs are required to have an integrity attribute. We only add CDNs to that list + // that recommend integrity-checking. + exists(string hostname, string requiredCheckingHostname | + hostname = url.regexpCapture("(?i)^(?:https?:)?//([^/]+)/.*\\.js$", 1) and + isCdnDomainWithCheckingRequired(requiredCheckingHostname) and + hostname = requiredCheckingHostname + ) + } + + /** A script element that refers to untrusted content. */ + class ScriptElementWithUntrustedContent extends AddsUntrustedUrl instanceof HTML::ScriptElement { + ScriptElementWithUntrustedContent() { + not exists(string digest | not digest = "" | super.getIntegrityDigest() = digest) and + isUntrustedSourceUrl(super.getSourcePath()) + } + + override string getUrl() { result = super.getSourcePath() } + + override string getProblem() { result = "Script loaded using unencrypted connection." } + } + + /** A script element that refers to untrusted content. */ + class CdnScriptElementWithUntrustedContent extends AddsUntrustedUrl, HTML::ScriptElement { + CdnScriptElementWithUntrustedContent() { + not exists(string digest | not digest = "" | this.getIntegrityDigest() = digest) and + ( + isCdnUrlWithCheckingRequired(this.getSourcePath()) + or + isUrlWithUntrustedDomain(super.getSourcePath()) + ) + } + + override string getUrl() { result = this.getSourcePath() } + + override string getProblem() { + result = "Script loaded from content delivery network with no integrity check." + } + } + + /** An iframe element that includes untrusted content. */ + class IframeElementWithUntrustedContent extends AddsUntrustedUrl instanceof HTML::IframeElement { + IframeElementWithUntrustedContent() { isUntrustedSourceUrl(super.getSourcePath()) } + + override string getUrl() { result = super.getSourcePath() } + + override string getProblem() { result = "Iframe loaded using unencrypted connection." } + } +} + +/** Holds if `url` refers to an URL that uses an untrusted domain. */ +bindingset[url] +predicate isUrlWithUntrustedDomain(string url) { + exists(string hostname | + hostname = url.regexpCapture("(?i)^(?:https?:)?//([^/]+)/.*", 1) and + isUntrustedHostname(hostname) + ) +} + +/** Holds if `hostname` refers to a domain or subdomain that is untrusted. */ +bindingset[hostname] +predicate isUntrustedHostname(string hostname) { + exists(string domain | + (hostname = domain or hostname.matches("%." + domain)) and + isUntrustedDomain(domain) + ) +} + +// The following predicates are extended in data extensions under javascript/ql/lib/semmle/javascript/security/domains/ +// and can be extended with custom model packs as necessary. +/** Holds for hostnames defined in data extensions */ +extensible predicate isCdnDomainWithCheckingRequired(string hostname); + +/** Holds for domains defined in data extensions */ +extensible predicate isUntrustedDomain(string domain); + +/** Looks for dyanmic creation of an element and source. */ +module DynamicCreation { + /** Holds if `call` creates a tag of kind `name`. */ + predicate isCreateElementNode(DataFlow::CallNode call, string name) { + call = DataFlow::globalVarRef("document").getAMethodCall("createElement") and + call.getArgument(0).getStringValue().toLowerCase() = name + } + + /** Get the right-hand side of an assignment to a named attribute. */ + DataFlow::Node getAttributeAssignmentRhs(DataFlow::CallNode createCall, string name) { + result = createCall.getAPropertyWrite(name).getRhs() + or + exists(DataFlow::InvokeNode inv | inv = createCall.getAMemberInvocation("setAttribute") | + inv.getArgument(0).getStringValue() = name and + result = inv.getArgument(1) + ) + } + + /** + * Holds if `createCall` creates a ` + + + ... + + \ No newline at end of file diff --git a/javascript/ql/src/Security/CWE-830/polyfill-sri.html b/javascript/ql/src/Security/CWE-830/polyfill-sri.html new file mode 100644 index 000000000000..67c51e4556ec --- /dev/null +++ b/javascript/ql/src/Security/CWE-830/polyfill-sri.html @@ -0,0 +1,9 @@ + + + Polyfill demo - Cloudflare hosted with pinned version (with integrity checking for a *very limited* browser set - just an example!) + + + + ... + + \ No newline at end of file diff --git a/javascript/ql/src/Security/CWE-830/polyfill-trusted.html b/javascript/ql/src/Security/CWE-830/polyfill-trusted.html new file mode 100644 index 000000000000..7b216314780c --- /dev/null +++ b/javascript/ql/src/Security/CWE-830/polyfill-trusted.html @@ -0,0 +1,9 @@ + + + Polyfill demo - Cloudflare hosted with pinned version (but no integrity checking, since it is dynamically generated) + + + + ... + + \ No newline at end of file diff --git a/javascript/ql/src/change-notes/released/1.1.0.md b/javascript/ql/src/change-notes/released/1.1.0.md new file mode 100644 index 000000000000..81883a0d44f0 --- /dev/null +++ b/javascript/ql/src/change-notes/released/1.1.0.md @@ -0,0 +1,13 @@ +## 1.1.0 + +### New Queries + +* Added a new query, `js/insecure-helmet-configuration`, to detect instances where Helmet middleware is configured with important security features disabled. + +### Minor Analysis Improvements + +* Added a new query, `js/functionality-from-untrusted-domain`, which detects uses in HTML and JavaScript scripts from untrusted domains, including the `polyfill.io` content delivery network + * it can be extended to detect other compromised scripts using user-provided data extensions of the `untrustedDomain` predicate, which takes one string argument with the domain to warn on (and will warn on any subdomains too). +* Modified existing query, `js/functionality-from-untrusted-source`, to allow adding this new query, but reusing the same logic + * Added the ability to use data extensions to require SRI on CDN hostnames using the `isCdnDomainWithCheckingRequired` predicate, which takes one string argument of the full hostname to require SRI for. +* Created a new library, `semmle.javascript.security.FunctionalityFromUntrustedSource`, to support both queries. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 06fa75b96cbc..2ac15439f561 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.1.0 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 721936f7c475..113e769b9fc0 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.0.3 +version: 1.1.0 groups: - javascript - queries diff --git a/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmet.expected b/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmet.expected new file mode 100644 index 000000000000..2c9407136aa4 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmet.expected @@ -0,0 +1,2 @@ +| InsecureHelmetBad.js:6:9:9:2 | helmet( ... uard\\n}) | Helmet security middleware, configured with security setting $@ set to 'false', which disables enforcing that feature. | InsecureHelmetBad.js:7:5:7:32 | content ... : false | contentSecurityPolicy | +| InsecureHelmetBad.js:6:9:9:2 | helmet( ... uard\\n}) | Helmet security middleware, configured with security setting $@ set to 'false', which disables enforcing that feature. | InsecureHelmetBad.js:8:5:8:21 | frameguard: false | frameguard | diff --git a/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmet.qlref b/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmet.qlref new file mode 100644 index 000000000000..9212b2674fcf --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmet.qlref @@ -0,0 +1 @@ +Security/CWE-693/InsecureHelmet.ql \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmetBad.js b/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmetBad.js new file mode 100644 index 000000000000..d9257999ef0b --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmetBad.js @@ -0,0 +1,17 @@ +const express = require("express"); +const helmet = require("helmet"); + +const app = express(); + +app.use(helmet({ + contentSecurityPolicy: false, // BAD: switch off default CSP + frameguard: false // BAD: switch off default frameguard +})); + +app.get("/", (req, res) => { + res.send("Hello, world!"); +}); + +app.listen(3000, () => { + console.log("App is listening on port 3000"); +}); diff --git a/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmetGood.js b/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmetGood.js new file mode 100644 index 000000000000..609c1fc2763c --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-693/InsecureHelmetGood.js @@ -0,0 +1,14 @@ +const express = require("express"); +const helmet = require("helmet"); + +const app = express(); + +app.use(helmet()); // GOOD: use the defaults + +app.get("/", (req, res) => { + res.send("Hello, world!"); +}); + +app.listen(3000, () => { + console.log("App is listening on port 3000"); +}); diff --git a/javascript/ql/test/query-tests/Security/CWE-830/FunctionalityFromUntrustedDomain.expected b/javascript/ql/test/query-tests/Security/CWE-830/FunctionalityFromUntrustedDomain.expected new file mode 100644 index 000000000000..688f9bb94886 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-830/FunctionalityFromUntrustedDomain.expected @@ -0,0 +1 @@ +| polyfill-nocheck.html:4:9:4:98 | + + + ... + + \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-830/polyfill-nocheck.html b/javascript/ql/test/query-tests/Security/CWE-830/polyfill-nocheck.html new file mode 100644 index 000000000000..6b9fbfe65c8a --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-830/polyfill-nocheck.html @@ -0,0 +1,9 @@ + + + Polyfill.io demo + + + + ... + + \ No newline at end of file diff --git a/misc/bazel/internal/install.py b/misc/bazel/internal/install.py index 7700dd52a170..f8ee18f0d746 100644 --- a/misc/bazel/internal/install.py +++ b/misc/bazel/internal/install.py @@ -11,6 +11,8 @@ import pathlib import shutil import subprocess +import platform +import time from python.runfiles import runfiles runfiles = runfiles.Create() @@ -41,8 +43,25 @@ assert destdir.is_absolute(), "Provide `--build-file` to resolve destination directory" script = runfiles.Rlocation(opts.pkg_install_script) +_WIN_FILE_IN_USE_ERROR_CODE = 32 + if destdir.exists() and opts.cleanup: - shutil.rmtree(destdir) + if platform.system() == 'Windows': + # On Windows we might have virus scanner still looking at the path so + # attempt removal a couple of times sleeping between each attempt. + for retry_delay in [1, 2, 2]: + try: + shutil.rmtree(destdir) + break + except OSError as e: + if e.winerror == _WIN_FILE_IN_USE_ERROR_CODE: + time.sleep(retry_delay) + else: + raise + else: + shutil.rmtree(destdir) + else: + shutil.rmtree(destdir) destdir.mkdir(parents=True, exist_ok=True) subprocess.run([script, "--destdir", destdir], check=True) diff --git a/misc/bazel/pkg.bzl b/misc/bazel/pkg.bzl index 5b91783510f7..62c2ee199459 100644 --- a/misc/bazel/pkg.bzl +++ b/misc/bazel/pkg.bzl @@ -140,6 +140,16 @@ def _zipmerge_impl(ctx): executable = ctx.executable._zipmerge, inputs = depset(zips, transitive = transitive_zips), arguments = args, + # Disable remote caching for zipmerge: + # * One of the inputs to zipmerge (often the larger one) comes from a lazy-lfs rule. + # Those are retrieved by bazel even in the presence of a build cache, so downloading the whole zipmerged + # artifact is slower than downloading the smaller bazel-produced zip and rerunning zipmerge on that + # and the (already-present) LFS artifact. + # * This prevents unnecessary cache usage - every change to the Swift extractor would otherwise + # trigger a build of a >500MB zip file that'd quickly fill up the cache. + execution_requirements = { + "no-remote-cache": "1", + }, ) return [ diff --git a/misc/scripts/models-as-data/generate_flow_model.py b/misc/scripts/models-as-data/generate_flow_model.py index 26dd961f4019..7654713d2804 100644 --- a/misc/scripts/models-as-data/generate_flow_model.py +++ b/misc/scripts/models-as-data/generate_flow_model.py @@ -193,7 +193,7 @@ def run(self): print("Models as data extensions generated, but not written to file.") sys.exit(0) - if self.generateSinks or self.generateSinks or self.generateSummaries: + if self.generateSinks or self.generateSources or self.generateSummaries or self.generateNeutrals: self.save(content, ".model.yml") if self.generateTypeBasedSummaries: diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index d38834ba2efa..9f92ac20b255 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.4.md b/misc/suite-helpers/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index c19a393c2dcb..14e15f3b9a99 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.3 +version: 1.0.4 groups: shared warnOnImplicitThis: true diff --git a/python/extractor/semmle/logging.py b/python/extractor/semmle/logging.py index fd2dc6a19165..0e0b173a4d7d 100644 --- a/python/extractor/semmle/logging.py +++ b/python/extractor/semmle/logging.py @@ -373,7 +373,8 @@ def syntax_error_message(exception, unit): return error def recursion_error_message(exception, unit): - l = Location(file=unit.path) + # if unit is a BuiltinModuleExtractable, there will be no path attribute + l = Location(file=unit.path) if hasattr(unit, "path") else None return (DiagnosticMessage(Source("py/diagnostics/recursion-error", "Recursion error in Python extractor"), Severity.ERROR) .with_location(l) .text(exception.args[0]) @@ -383,7 +384,8 @@ def recursion_error_message(exception, unit): ) def internal_error_message(exception, unit): - l = Location(file=unit.path) + # if unit is a BuiltinModuleExtractable, there will be no path attribute + l = Location(file=unit.path) if hasattr(unit, "path") else None return (DiagnosticMessage(Source("py/diagnostics/internal-error", "Internal error in Python extractor"), Severity.ERROR) .with_location(l) .text("Internal error") diff --git a/python/extractor/semmle/util.py b/python/extractor/semmle/util.py index 85868a793518..8e1a371fc717 100644 --- a/python/extractor/semmle/util.py +++ b/python/extractor/semmle/util.py @@ -10,7 +10,7 @@ #Semantic version of extractor. #Update this if any changes are made -VERSION = "6.1.1" +VERSION = "6.1.2" PY_EXTENSIONS = ".py", ".pyw" diff --git a/python/extractor/semmle/worker.py b/python/extractor/semmle/worker.py index 1207caf67271..726c2c90c3b8 100644 --- a/python/extractor/semmle/worker.py +++ b/python/extractor/semmle/worker.py @@ -274,16 +274,24 @@ def _extract_loop(proc_id, queue, trap_dir, archive, options, reply_queue, logge # Syntax errors have already been handled in extractor.py reply_queue.put(("FAILURE", unit, None)) except RecursionError as ex: - error = recursion_error_message(ex, unit) - diagnostics_writer.write(error) logger.error("Failed to extract %s: %s", unit, ex) logger.traceback(WARN) + try: + error = recursion_error_message(ex, unit) + diagnostics_writer.write(error) + except Exception as ex: + logger.warning("Failed to write diagnostics: %s", ex) + logger.traceback(WARN) reply_queue.put(("FAILURE", unit, None)) except Exception as ex: - error = internal_error_message(ex, unit) - diagnostics_writer.write(error) logger.error("Failed to extract %s: %s", unit, ex) logger.traceback(WARN) + try: + error = internal_error_message(ex, unit) + diagnostics_writer.write(error) + except Exception as ex: + logger.warning("Failed to write diagnostics: %s", ex) + logger.traceback(WARN) reply_queue.put(("FAILURE", unit, None)) else: reply_queue.put(("SUCCESS", unit, None)) diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 65d784e6456f..382efff551c6 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.4 + +### Minor Analysis Improvements + +* Additional modelling to detect direct writes to the `Set-Cookie` header has been added for several web frameworks. + ## 1.0.3 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/released/1.0.4.md b/python/ql/lib/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..9da90a6cc331 --- /dev/null +++ b/python/ql/lib/change-notes/released/1.0.4.md @@ -0,0 +1,5 @@ +## 1.0.4 + +### Minor Analysis Improvements + +* Additional modelling to detect direct writes to the `Set-Cookie` header has been added for several web frameworks. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 8e3b586da7ed..fdb646bad178 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 1.0.3 +version: 1.0.4 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 029f13ee0c2a..20578e26960f 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -1134,6 +1134,54 @@ module Http { } } + /** A key-value pair in a literal for a bulk header update, considered as a single header update. */ + private class HeaderBulkWriteDictLiteral extends Http::Server::ResponseHeaderWrite::Range instanceof Http::Server::ResponseHeaderBulkWrite + { + KeyValuePair item; + + HeaderBulkWriteDictLiteral() { + exists(Dict dict | DataFlow::localFlow(DataFlow::exprNode(dict), super.getBulkArg()) | + item = dict.getAnItem() + ) + } + + override DataFlow::Node getNameArg() { result.asExpr() = item.getKey() } + + override DataFlow::Node getValueArg() { result.asExpr() = item.getValue() } + + override predicate nameAllowsNewline() { + Http::Server::ResponseHeaderBulkWrite.super.nameAllowsNewline() + } + + override predicate valueAllowsNewline() { + Http::Server::ResponseHeaderBulkWrite.super.valueAllowsNewline() + } + } + + /** A tuple in a list for a bulk header update, considered as a single header update. */ + private class HeaderBulkWriteListLiteral extends Http::Server::ResponseHeaderWrite::Range instanceof Http::Server::ResponseHeaderBulkWrite + { + Tuple item; + + HeaderBulkWriteListLiteral() { + exists(List list | DataFlow::localFlow(DataFlow::exprNode(list), super.getBulkArg()) | + item = list.getAnElt() + ) + } + + override DataFlow::Node getNameArg() { result.asExpr() = item.getElt(0) } + + override DataFlow::Node getValueArg() { result.asExpr() = item.getElt(1) } + + override predicate nameAllowsNewline() { + Http::Server::ResponseHeaderBulkWrite.super.nameAllowsNewline() + } + + override predicate valueAllowsNewline() { + Http::Server::ResponseHeaderBulkWrite.super.valueAllowsNewline() + } + } + /** * A data-flow node that sets a cookie in an HTTP response. * @@ -1186,6 +1234,27 @@ module Http { } } + /** A write to a `Set-Cookie` header that sets a cookie directly. */ + private class CookieHeaderWrite extends CookieWrite::Range instanceof Http::Server::ResponseHeaderWrite + { + CookieHeaderWrite() { + exists(StringLiteral str | + str.getText().toLowerCase() = "set-cookie" and + DataFlow::exprNode(str) + .(DataFlow::LocalSourceNode) + .flowsTo(this.(Http::Server::ResponseHeaderWrite).getNameArg()) + ) + } + + override DataFlow::Node getNameArg() { none() } + + override DataFlow::Node getHeaderArg() { + result = this.(Http::Server::ResponseHeaderWrite).getValueArg() + } + + override DataFlow::Node getValueArg() { none() } + } + /** * A data-flow node that enables or disables Cross-site request forgery protection * in a global manner. diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 5b9b6c1a3273..38436d99e147 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1025,8 +1025,6 @@ class NodeRegion instanceof Unit { string toString() { result = "NodeRegion" } predicate contains(Node n) { none() } - - int totalOrder() { result = 1 } } //-------- diff --git a/python/ql/lib/semmle/python/frameworks/Aiohttp.qll b/python/ql/lib/semmle/python/frameworks/Aiohttp.qll index 78d269c31d31..517b309594aa 100644 --- a/python/ql/lib/semmle/python/frameworks/Aiohttp.qll +++ b/python/ql/lib/semmle/python/frameworks/Aiohttp.qll @@ -706,6 +706,33 @@ module AiohttpWebModel { override DataFlow::Node getValueArg() { result = value } } + + /** + * A dict-like write to an item of the `headers` attribute on a HTTP response, such as + * `response.headers[name] = value`. + */ + class AiohttpResponseHeaderSubscriptWrite extends Http::Server::ResponseHeaderWrite::Range { + DataFlow::Node index; + DataFlow::Node value; + + AiohttpResponseHeaderSubscriptWrite() { + exists(API::Node i | + value = aiohttpResponseInstance().getMember("headers").getSubscriptAt(i).asSink() and + index = i.asSink() and + // To give `this` a value, we need to choose between either LHS or RHS, + // and just go with the RHS as it is readily available + this = value + ) + } + + override DataFlow::Node getNameArg() { result = index } + + override DataFlow::Node getValueArg() { result = value } + + override predicate nameAllowsNewline() { none() } + + override predicate valueAllowsNewline() { none() } + } } /** diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index 064dba57f92a..b3b027e48ffe 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2239,6 +2239,71 @@ module PrivateDjango { override DataFlow::Node getValueArg() { result = value } } + + /** + * A dict-like write to an item of the `headers` attribute on a HTTP response, such as + * `response.headers[name] = value`. + */ + class DjangoResponseHeaderSubscriptWrite extends Http::Server::ResponseHeaderWrite::Range { + DataFlow::Node index; + DataFlow::Node value; + + DjangoResponseHeaderSubscriptWrite() { + exists(SubscriptNode subscript, DataFlow::AttrRead headerLookup | + // To give `this` a value, we need to choose between either LHS or RHS, + // and just go with the LHS + this.asCfgNode() = subscript + | + headerLookup + .accesses(DjangoImpl::DjangoHttp::Response::HttpResponse::instance(), "headers") and + exists(DataFlow::Node subscriptObj | + subscriptObj.asCfgNode() = subscript.getObject() + | + headerLookup.flowsTo(subscriptObj) + ) and + value.asCfgNode() = subscript.(DefinitionNode).getValue() and + index.asCfgNode() = subscript.getIndex() + ) + } + + override DataFlow::Node getNameArg() { result = index } + + override DataFlow::Node getValueArg() { result = value } + + override predicate nameAllowsNewline() { none() } + + override predicate valueAllowsNewline() { none() } + } + + /** + * A dict-like write to an item of an HTTP response, which is treated as a header write, + * such as `response[headerName] = value` + */ + class DjangoResponseSubscriptWrite extends Http::Server::ResponseHeaderWrite::Range { + DataFlow::Node index; + DataFlow::Node value; + + DjangoResponseSubscriptWrite() { + exists(SubscriptNode subscript | + // To give `this` a value, we need to choose between either LHS or RHS, + // and just go with the LHS + this.asCfgNode() = subscript + | + subscript.getObject() = + DjangoImpl::DjangoHttp::Response::HttpResponse::instance().asCfgNode() and + value.asCfgNode() = subscript.(DefinitionNode).getValue() and + index.asCfgNode() = subscript.getIndex() + ) + } + + override DataFlow::Node getNameArg() { result = index } + + override DataFlow::Node getValueArg() { result = value } + + override predicate nameAllowsNewline() { none() } + + override predicate valueAllowsNewline() { none() } + } } } diff --git a/python/ql/lib/semmle/python/frameworks/FastApi.qll b/python/ql/lib/semmle/python/frameworks/FastApi.qll index 8c958e9343db..0793b4b7d6ab 100644 --- a/python/ql/lib/semmle/python/frameworks/FastApi.qll +++ b/python/ql/lib/semmle/python/frameworks/FastApi.qll @@ -361,28 +361,59 @@ module FastApi { } /** - * A call to `append` on a `headers` of a FastAPI Response, with the `Set-Cookie` - * header-key. + * A call to `append` on a `headers` of a FastAPI Response. */ - private class HeadersAppendCookie extends Http::Server::CookieWrite::Range, + private class HeadersAppend extends Http::Server::ResponseHeaderWrite::Range, DataFlow::MethodCallNode { - HeadersAppendCookie() { - exists(DataFlow::AttrRead headers, DataFlow::Node keyArg | + HeadersAppend() { + exists(DataFlow::AttrRead headers | headers.accesses(instance(), "headers") and - this.calls(headers, "append") and - keyArg in [this.getArg(0), this.getArgByName("key")] and - keyArg.getALocalSource().asExpr().(StringLiteral).getText().toLowerCase() = "set-cookie" + this.calls(headers, "append") ) } - override DataFlow::Node getHeaderArg() { + override DataFlow::Node getNameArg() { result = [this.getArg(0), this.getArgByName("key")] } + + override DataFlow::Node getValueArg() { result in [this.getArg(1), this.getArgByName("value")] } - override DataFlow::Node getNameArg() { none() } + override predicate nameAllowsNewline() { none() } + + override predicate valueAllowsNewline() { none() } + } + + /** + * A dict-like write to an item of the `headers` attribute on a HTTP response, such as + * `response.headers[name] = value`. + */ + class HeaderSubscriptWrite extends Http::Server::ResponseHeaderWrite::Range { + DataFlow::Node index; + DataFlow::Node value; + + HeaderSubscriptWrite() { + exists(SubscriptNode subscript, DataFlow::AttrRead headerLookup | + // To give `this` a value, we need to choose between either LHS or RHS, + // and just go with the LHS + this.asCfgNode() = subscript + | + headerLookup.accesses(instance(), "headers") and + exists(DataFlow::Node subscriptObj | subscriptObj.asCfgNode() = subscript.getObject() | + headerLookup.flowsTo(subscriptObj) + ) and + value.asCfgNode() = subscript.(DefinitionNode).getValue() and + index.asCfgNode() = subscript.getIndex() + ) + } + + override DataFlow::Node getNameArg() { result = index } + + override DataFlow::Node getValueArg() { result = value } + + override predicate nameAllowsNewline() { none() } - override DataFlow::Node getValueArg() { none() } + override predicate valueAllowsNewline() { none() } } } } diff --git a/python/ql/lib/semmle/python/frameworks/Tornado.qll b/python/ql/lib/semmle/python/frameworks/Tornado.qll index 1bd406032962..214f2fb9bad3 100644 --- a/python/ql/lib/semmle/python/frameworks/Tornado.qll +++ b/python/ql/lib/semmle/python/frameworks/Tornado.qll @@ -63,6 +63,50 @@ module Tornado { override string getAsyncMethodName() { none() } } + + /** + * A dict-like write to an item of an `HTTPHeaders` object. + */ + private class TornadoHeaderSubscriptWrite extends Http::Server::ResponseHeaderWrite::Range { + DataFlow::Node index; + DataFlow::Node value; + + TornadoHeaderSubscriptWrite() { + exists(SubscriptNode subscript | + subscript.getObject() = instance().asCfgNode() and + value.asCfgNode() = subscript.(DefinitionNode).getValue() and + index.asCfgNode() = subscript.getIndex() and + this.asCfgNode() = subscript + ) + } + + override DataFlow::Node getNameArg() { result = index } + + override DataFlow::Node getValueArg() { result = value } + + override predicate nameAllowsNewline() { none() } + + override predicate valueAllowsNewline() { none() } + } + + /** + * A call to `HTTPHeaders.add`. + */ + private class TornadoHeadersAppendCall extends Http::Server::ResponseHeaderWrite::Range, + DataFlow::MethodCallNode + { + TornadoHeadersAppendCall() { this.calls(instance(), "add") } + + override DataFlow::Node getNameArg() { result = [this.getArg(0), this.getArgByName("name")] } + + override DataFlow::Node getValueArg() { + result in [this.getArg(1), this.getArgByName("value")] + } + + override predicate nameAllowsNewline() { none() } + + override predicate valueAllowsNewline() { none() } + } } // --------------------------------------------------------------------------- @@ -209,6 +253,25 @@ module Tornado { this.(DataFlow::AttrRead).getAttributeName() = "request" } } + + /** A call to `RequestHandler.set_header` or `RequestHandler.add_header` */ + private class TornadoSetHeaderCall extends Http::Server::ResponseHeaderWrite::Range, + DataFlow::MethodCallNode + { + TornadoSetHeaderCall() { this.calls(instance(), ["set_header", "add_header"]) } + + override DataFlow::Node getNameArg() { + result = [this.getArg(0), this.getArgByName("name")] + } + + override DataFlow::Node getValueArg() { + result in [this.getArg(1), this.getArgByName("value")] + } + + override predicate nameAllowsNewline() { none() } + + override predicate valueAllowsNewline() { none() } + } } /** diff --git a/python/ql/lib/semmle/python/security/dataflow/HttpHeaderInjectionCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/HttpHeaderInjectionCustomizations.qll index b3fe233629e4..e529d3f29e0f 100644 --- a/python/ql/lib/semmle/python/security/dataflow/HttpHeaderInjectionCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/HttpHeaderInjectionCustomizations.qll @@ -51,56 +51,6 @@ module HttpHeaderInjection { } } - /** A key-value pair in a literal for a bulk header update, considered as a single header update. */ - // TODO: We could instead consider bulk writes as sinks with an implicit read step of DictionaryKey/DictionaryValue content as needed. - private class HeaderBulkWriteDictLiteral extends Http::Server::ResponseHeaderWrite::Range instanceof Http::Server::ResponseHeaderBulkWrite - { - KeyValuePair item; - - HeaderBulkWriteDictLiteral() { - exists(Dict dict | DataFlow::localFlow(DataFlow::exprNode(dict), super.getBulkArg()) | - item = dict.getAnItem() - ) - } - - override DataFlow::Node getNameArg() { result.asExpr() = item.getKey() } - - override DataFlow::Node getValueArg() { result.asExpr() = item.getValue() } - - override predicate nameAllowsNewline() { - Http::Server::ResponseHeaderBulkWrite.super.nameAllowsNewline() - } - - override predicate valueAllowsNewline() { - Http::Server::ResponseHeaderBulkWrite.super.valueAllowsNewline() - } - } - - /** A tuple in a list for a bulk header update, considered as a single header update. */ - // TODO: We could instead consider bulk writes as sinks with implicit read steps as needed. - private class HeaderBulkWriteListLiteral extends Http::Server::ResponseHeaderWrite::Range instanceof Http::Server::ResponseHeaderBulkWrite - { - Tuple item; - - HeaderBulkWriteListLiteral() { - exists(List list | DataFlow::localFlow(DataFlow::exprNode(list), super.getBulkArg()) | - item = list.getAnElt() - ) - } - - override DataFlow::Node getNameArg() { result.asExpr() = item.getElt(0) } - - override DataFlow::Node getValueArg() { result.asExpr() = item.getElt(1) } - - override predicate nameAllowsNewline() { - Http::Server::ResponseHeaderBulkWrite.super.nameAllowsNewline() - } - - override predicate valueAllowsNewline() { - Http::Server::ResponseHeaderBulkWrite.super.valueAllowsNewline() - } - } - /** * A call to replace line breaks, considered as a sanitizer. */ diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 1015dd241444..b386509bd979 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 ### Minor Analysis Improvements diff --git a/python/ql/src/change-notes/released/1.0.4.md b/python/ql/src/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/python/ql/src/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/python/ql/src/experimental/Security/CWE-094/Js2Py.qhelp b/python/ql/src/experimental/Security/CWE-094/Js2Py.qhelp new file mode 100644 index 000000000000..6be0b43d1a1f --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-094/Js2Py.qhelp @@ -0,0 +1,24 @@ + + + +

+ Passing untrusted inputs to a JavaScript interpreter like `Js2Py` can lead to arbitrary + code execution. +

+
+ +

This vulnerability can be prevented either by preventing an untrusted user input to flow + to an eval_js call. Or, the impact of this vulnerability can be + significantly reduced by disabling imports from the interepreted code (note that in a + comment the author of the library highlights that Js2Py is still insecure with this + option).

+ + +

In the example below, the Javascript code being evaluated is controlled by the user and + hence leads to arbitrary code execution.

+ +

This can be fixed by disabling imports before evaluating the user passed buffer.

+ +
+ diff --git a/python/ql/src/experimental/Security/CWE-094/Js2Py.ql b/python/ql/src/experimental/Security/CWE-094/Js2Py.ql new file mode 100644 index 000000000000..5dc160077873 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-094/Js2Py.ql @@ -0,0 +1,38 @@ +/** + * @name JavaScript code execution. + * @description Passing user supplied arguments to a Javascript to Python translation engine such as Js2Py can lead to remote code execution. + * @problem.severity error + * @security-severity 9.3 + * @precision high + * @kind path-problem + * @id py/js2py-rce + * @tags security + * experimental + * external/cwe/cwe-94 + */ + +import python +import semmle.python.ApiGraphs +import semmle.python.dataflow.new.TaintTracking +import semmle.python.dataflow.new.RemoteFlowSources +import semmle.python.Concepts + +module Js2PyFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { node instanceof RemoteFlowSource } + + predicate isSink(DataFlow::Node node) { + API::moduleImport("js2py").getMember(["eval_js", "eval_js6", "EvalJs"]).getACall().getArg(_) = + node + } +} + +module Js2PyFlow = TaintTracking::Global; + +import Js2PyFlow::PathGraph + +from Js2PyFlow::PathNode source, Js2PyFlow::PathNode sink +where + Js2PyFlow::flowPath(source, sink) and + not exists(API::moduleImport("js2py").getMember("disable_pyimport").getACall()) +select sink, source, sink, "This input to Js2Py depends on a $@.", source.getNode(), + "user-provided value" diff --git a/python/ql/src/experimental/Security/CWE-094/Js2pyBad.py b/python/ql/src/experimental/Security/CWE-094/Js2pyBad.py new file mode 100644 index 000000000000..69791a424628 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-094/Js2pyBad.py @@ -0,0 +1,4 @@ +@bp.route("/bad") +def bad(): + jk = flask.request.form["jk"] + jk = eval_js(f"{jk} f()") diff --git a/python/ql/src/experimental/Security/CWE-094/Js2pyGood.py b/python/ql/src/experimental/Security/CWE-094/Js2pyGood.py new file mode 100644 index 000000000000..dd034d48bb30 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-094/Js2pyGood.py @@ -0,0 +1,6 @@ +@bp.route("/good") +def good(): + # disable python imports to prevent execution of malicious code + js2py.disable_pyimport() + jk = flask.request.form["jk"] + jk = eval_js(f"{jk} f()") diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index b84fc170ba1d..698c52f9e8f6 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.0.3 +version: 1.0.4 groups: - python - queries diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index b552758582b3..473c7c177c7e 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -323,8 +323,8 @@ module HttpResponseHeaderWriteTest implements TestSig { string getARelevantTag() { result = [ - "headerWriteNameUnsanitized", "headerWriteNameSanitized", "headerWriteValueUnsanitized", - "headerWriteValueSanitized", "headerWriteBulk" + "headerWriteNameUnsanitized", "headerWriteName", "headerWriteValueUnsanitized", + "headerWriteValue", "headerWriteBulk", "headerWriteBulkUnsanitized" ] } @@ -339,7 +339,7 @@ module HttpResponseHeaderWriteTest implements TestSig { ( if write.nameAllowsNewline() then tag = "headerWriteNameUnsanitized" - else tag = "headerWriteNameSanitized" + else tag = "headerWriteName" ) and value = prettyNodeForInlineTest(node) or @@ -347,7 +347,7 @@ module HttpResponseHeaderWriteTest implements TestSig { ( if write.valueAllowsNewline() then tag = "headerWriteValueUnsanitized" - else tag = "headerWriteValueSanitized" + else tag = "headerWriteValue" ) and value = prettyNodeForInlineTest(node) ) @@ -360,19 +360,20 @@ module HttpResponseHeaderWriteTest implements TestSig { tag = "headerWriteBulk" and value = prettyNodeForInlineTest(node) or + tag = "headerWriteBulkUnsanitized" and ( - if write.nameAllowsNewline() - then tag = "headerWriteNameUnsanitized" - else tag = "headerWriteNameSanitized" - ) and - value = "" - or - ( - if write.valueAllowsNewline() - then tag = "headerWriteValueUnsanitized" - else tag = "headerWriteValueSanitized" - ) and - value = "" + write.nameAllowsNewline() and + not write.valueAllowsNewline() and + value = "name" + or + not write.nameAllowsNewline() and + write.valueAllowsNewline() and + value = "value" + or + write.nameAllowsNewline() and + write.valueAllowsNewline() and + value = "name,value" + ) ) ) ) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-094/Js2Py.expected b/python/ql/test/experimental/query-tests/Security/CWE-094/Js2Py.expected new file mode 100644 index 000000000000..7798cdda143c --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-094/Js2Py.expected @@ -0,0 +1,10 @@ +edges +| Js2PyTest.py:9:5:9:6 | ControlFlowNode for jk | Js2PyTest.py:10:18:10:28 | ControlFlowNode for Fstring | provenance | | +| Js2PyTest.py:9:10:9:22 | ControlFlowNode for Attribute | Js2PyTest.py:9:5:9:6 | ControlFlowNode for jk | provenance | AdditionalTaintStep | +nodes +| Js2PyTest.py:9:5:9:6 | ControlFlowNode for jk | semmle.label | ControlFlowNode for jk | +| Js2PyTest.py:9:10:9:22 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| Js2PyTest.py:10:18:10:28 | ControlFlowNode for Fstring | semmle.label | ControlFlowNode for Fstring | +subpaths +#select +| Js2PyTest.py:10:18:10:28 | ControlFlowNode for Fstring | Js2PyTest.py:9:10:9:22 | ControlFlowNode for Attribute | Js2PyTest.py:10:18:10:28 | ControlFlowNode for Fstring | This input to Js2Py depends on a $@. | Js2PyTest.py:9:10:9:22 | ControlFlowNode for Attribute | user-provided value | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-094/Js2Py.qlref b/python/ql/test/experimental/query-tests/Security/CWE-094/Js2Py.qlref new file mode 100644 index 000000000000..457bfe2aacca --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-094/Js2Py.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-094/Js2Py.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-094/Js2PyTest.py b/python/ql/test/experimental/query-tests/Security/CWE-094/Js2PyTest.py new file mode 100644 index 000000000000..f7aae16a9eed --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-094/Js2PyTest.py @@ -0,0 +1,10 @@ + +import flask +from js2py import eval_js, disable_pyimport + +bp = flask.Blueprint("app", __name__, url_prefix="/") + +@bp.route("/bad") +def bad(): + jk = flask.request.form["jk"] + jk = eval_js(f"{jk} f()") \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected index 1b3120c8546c..80dcbae21773 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected @@ -1,4 +1,6 @@ edges +| django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | provenance | | +| django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | provenance | | | flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_bad.py:1:26:1:32 | ControlFlowNode for request | provenance | | | flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:24:21:24:27 | ControlFlowNode for request | provenance | | | flask_bad.py:1:26:1:32 | ControlFlowNode for request | flask_bad.py:24:49:24:55 | ControlFlowNode for request | provenance | | @@ -12,6 +14,9 @@ edges nodes | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | semmle.label | ControlFlowNode for Fstring | +| django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | flask_bad.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_bad.py:24:21:24:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | @@ -29,6 +34,12 @@ subpaths | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | Cookie is constructed from a $@,and its httponly flag is not properly set. | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | user-supplied input | | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | Cookie is constructed from a $@,and its samesite flag is not properly set. | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | user-supplied input | | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | Cookie is constructed from a $@,and its secure flag is not properly set. | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | user-supplied input | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a $@,and its httponly flag is not properly set. | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a $@,and its samesite flag is not properly set. | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a $@,and its secure flag is not properly set. | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a $@,and its httponly flag is not properly set. | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | user-supplied input | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a $@,and its samesite flag is not properly set. | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | user-supplied input | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a $@,and its secure flag is not properly set. | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | user-supplied input | | flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | Cookie is constructed from a $@,and its httponly flag is not properly set. | flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | user-supplied input | | flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | Cookie is constructed from a $@,and its samesite flag is not properly set. | flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | user-supplied input | | flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | Cookie is constructed from a $@,and its secure flag is not properly set. | flask_bad.py:1:26:1:32 | ControlFlowNode for ImportMember | user-supplied input | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected index 2743a8d21167..61f9b9b74692 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected @@ -1,9 +1,15 @@ | django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the 'httponly' flag properly set. | | django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the 'samesite' flag properly set. | | django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the 'secure' flag properly set. | +| django_bad.py:13:5:13:26 | ControlFlowNode for Subscript | Cookie is added without the 'httponly' flag properly set. | +| django_bad.py:13:5:13:26 | ControlFlowNode for Subscript | Cookie is added without the 'samesite' flag properly set. | +| django_bad.py:13:5:13:26 | ControlFlowNode for Subscript | Cookie is added without the 'secure' flag properly set. | | django_bad.py:19:5:21:66 | ControlFlowNode for Attribute() | Cookie is added without the 'httponly' flag properly set. | | django_bad.py:19:5:21:66 | ControlFlowNode for Attribute() | Cookie is added without the 'samesite' flag properly set. | | django_bad.py:19:5:21:66 | ControlFlowNode for Attribute() | Cookie is added without the 'secure' flag properly set. | +| django_bad.py:27:5:27:26 | ControlFlowNode for Subscript | Cookie is added without the 'httponly' flag properly set. | +| django_bad.py:27:5:27:26 | ControlFlowNode for Subscript | Cookie is added without the 'samesite' flag properly set. | +| django_bad.py:27:5:27:26 | ControlFlowNode for Subscript | Cookie is added without the 'secure' flag properly set. | | django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the 'httponly' flag properly set. | | django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the 'samesite' flag properly set. | | django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the 'secure' flag properly set. | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py index 45cece4390f1..6f1916930e53 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py @@ -7,7 +7,7 @@ def django_response(request): httponly=False, samesite='None') return resp -# This test no longer produces an output due to django header setting methods not being modeled in the main query pack + def django_response(): response = django.http.HttpResponse() response['Set-Cookie'] = "name=value; SameSite=None;" @@ -21,7 +21,7 @@ def django_response(request): secure=False, httponly=False, samesite='None') return resp -# This test no longer produces an output due to django header setting methods not being modeled in the main query pack + def django_response(): response = django.http.HttpResponse() response['Set-Cookie'] = f"{django.http.request.GET.get('name')}={django.http.request.GET.get('value')}; SameSite=None;" diff --git a/python/ql/test/library-tests/frameworks/aiohttp/response_test.py b/python/ql/test/library-tests/frameworks/aiohttp/response_test.py index bc9bc8d3bda2..a40bf0bbc65e 100644 --- a/python/ql/test/library-tests/frameworks/aiohttp/response_test.py +++ b/python/ql/test/library-tests/frameworks/aiohttp/response_test.py @@ -96,7 +96,7 @@ async def streaming_response(request): # $ requestHandler async def setting_cookie(request): # $ requestHandler resp = web.Response(text="foo") # $ HttpResponse mimetype=text/plain responseBody="foo" resp.cookies["key"] = "value" # $ CookieWrite CookieName="key" CookieValue="value" - resp.headers["Set-Cookie"] = "key2=value2" # $ MISSING: CookieWrite CookieRawHeader="key2=value2" + resp.headers["Set-Cookie"] = "key2=value2" # $ headerWriteName="Set-Cookie" headerWriteValue="key2=value2" CookieWrite CookieRawHeader="key2=value2" resp.set_cookie("key3", "value3") # $ CookieWrite CookieName="key3" CookieValue="value3" resp.set_cookie(name="key3", value="value3") # $ CookieWrite CookieName="key3" CookieValue="value3" resp.del_cookie("key4") # $ CookieWrite CookieName="key4" diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py b/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py index dd78cd510168..7722b4de8e18 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py @@ -62,7 +62,7 @@ def redirect_through_normal_response(request): resp = HttpResponse() # $ HttpResponse mimetype=text/html resp.status_code = 302 - resp['Location'] = next # $ MISSING: redirectLocation=next + resp['Location'] = next # $ headerWriteName='Location' headerWriteValue=next MISSING: redirectLocation=next resp.content = private # $ MISSING: responseBody=private return resp @@ -72,7 +72,7 @@ def redirect_through_normal_response_new_headers_attr(request): resp = HttpResponse() # $ HttpResponse mimetype=text/html resp.status_code = 302 - resp.headers['Location'] = next # $ MISSING: redirectLocation=next + resp.headers['Location'] = next # $ headerWriteName='Location' headerWriteValue=next MISSING: redirectLocation=next resp.content = private # $ MISSING: responseBody=private return resp @@ -130,8 +130,9 @@ def setting_cookie(request): resp = HttpResponse() # $ HttpResponse mimetype=text/html resp.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value" resp.set_cookie(key="key", value="value") # $ CookieWrite CookieName="key" CookieValue="value" - resp.headers["Set-Cookie"] = "key2=value2" # $ MISSING: CookieWrite CookieRawHeader="key2=value2" + resp.headers["Set-Cookie"] = "key2=value2" # $ headerWriteName="Set-Cookie" headerWriteValue="key2=value2" CookieWrite CookieRawHeader="key2=value2" resp.cookies["key3"] = "value3" # $ CookieWrite CookieName="key3" CookieValue="value3" resp.delete_cookie("key4") # $ CookieWrite CookieName="key4" resp.delete_cookie(key="key4") # $ CookieWrite CookieName="key4" + resp["Set-Cookie"] = "key5=value5" # $ headerWriteName="Set-Cookie" headerWriteValue="key5=value5" CookieWrite CookieRawHeader="key5=value5" return resp diff --git a/python/ql/test/library-tests/frameworks/fastapi/response_test.py b/python/ql/test/library-tests/frameworks/fastapi/response_test.py index 9f276338c8cc..2bc26c15fdac 100644 --- a/python/ql/test/library-tests/frameworks/fastapi/response_test.py +++ b/python/ql/test/library-tests/frameworks/fastapi/response_test.py @@ -11,9 +11,9 @@ async def response_parameter(response: Response): # $ requestHandler response.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value" response.set_cookie(key="key", value="value") # $ CookieWrite CookieName="key" CookieValue="value" - response.headers.append("Set-Cookie", "key2=value2") # $ CookieWrite CookieRawHeader="key2=value2" - response.headers.append(key="Set-Cookie", value="key2=value2") # $ CookieWrite CookieRawHeader="key2=value2" - response.headers["X-MyHeader"] = "header-value" + response.headers.append("Set-Cookie", "key2=value2") # $ headerWriteName="Set-Cookie" headerWriteValue="key2=value2" CookieWrite CookieRawHeader="key2=value2" + response.headers.append(key="Set-Cookie", value="key2=value2") # $ headerWriteName="Set-Cookie" headerWriteValue="key2=value2" CookieWrite CookieRawHeader="key2=value2" + response.headers["X-MyHeader"] = "header-value" # $ headerWriteName="X-MyHeader" headerWriteValue="header-value" response.status_code = 418 return {"message": "response as parameter"} # $ HttpResponse mimetype=application/json responseBody=Dict @@ -45,7 +45,7 @@ async def response_parameter_custom_type(response: MyXmlResponse): # $ requestHa print(type(response)) assert type(response) == fastapi.responses.Response response.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value" - response.headers["Custom-Response-Type"] = "yes, but only after function has run" + response.headers["Custom-Response-Type"] = "yes, but only after function has run" # $ headerWriteName="Custom-Response-Type" headerWriteValue="yes, but only after function has run" xml_data = "FOO" return xml_data # $ HttpResponse responseBody=xml_data mimetype=application/xml diff --git a/python/ql/test/library-tests/frameworks/flask/response_test.py b/python/ql/test/library-tests/frameworks/flask/response_test.py index 1359d2f93810..a1341022c4ec 100644 --- a/python/ql/test/library-tests/frameworks/flask/response_test.py +++ b/python/ql/test/library-tests/frameworks/flask/response_test.py @@ -118,7 +118,7 @@ def response_modification1(): # $requestHandler @app.route("/content-type/response-modification2") # $routeSetup="/content-type/response-modification2" def response_modification2(): # $requestHandler resp = make_response("

hello

") # $HttpResponse mimetype=text/html responseBody="

hello

" - resp.headers["content-type"] = "text/plain" # $ headerWriteNameUnsanitized="content-type" headerWriteValueSanitized="text/plain" MISSING: HttpResponse mimetype=text/plain + resp.headers["content-type"] = "text/plain" # $ headerWriteNameUnsanitized="content-type" headerWriteValue="text/plain" MISSING: HttpResponse mimetype=text/plain return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp @@ -148,7 +148,7 @@ def Response3(): # $requestHandler @app.route("/content-type/Response4") # $routeSetup="/content-type/Response4" def Response4(): # $requestHandler # note: capitalization of Content-Type does not matter - resp = Response("

hello

", headers={"Content-TYPE": "text/plain"}) # $ headerWriteBulk=Dict headerWriteNameUnsanitized headerWriteValueSanitized HttpResponse responseBody="

hello

" SPURIOUS: mimetype=text/html MISSING: mimetype=text/plain + resp = Response("

hello

", headers={"Content-TYPE": "text/plain"}) # $ headerWriteBulk=Dict headerWriteBulkUnsanitized=name headerWriteNameUnsanitized="Content-TYPE" headerWriteValue="text/plain" HttpResponse responseBody="

hello

" SPURIOUS: mimetype=text/html MISSING: mimetype=text/plain return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp @@ -156,7 +156,7 @@ def Response4(): # $requestHandler def Response5(): # $requestHandler # content_type argument takes priority (and result is text/plain) # note: capitalization of Content-Type does not matter - resp = Response("

hello

", headers={"Content-TYPE": "text/html"}, content_type="text/plain; charset=utf-8") # $ headerWriteBulk=Dict headerWriteNameUnsanitized headerWriteValueSanitized HttpResponse mimetype=text/plain responseBody="

hello

" + resp = Response("

hello

", headers={"Content-TYPE": "text/html"}, content_type="text/plain; charset=utf-8") # $ headerWriteBulk=Dict headerWriteBulkUnsanitized=name headerWriteNameUnsanitized="Content-TYPE" headerWriteValue="text/html" HttpResponse mimetype=text/plain responseBody="

hello

" return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp @@ -164,7 +164,7 @@ def Response5(): # $requestHandler def Response6(): # $requestHandler # mimetype argument takes priority over header (and result is text/plain) # note: capitalization of Content-Type does not matter - resp = Response("

hello

", headers={"Content-TYPE": "text/html"}, mimetype="text/plain") # $ headerWriteBulk=Dict headerWriteNameUnsanitized headerWriteValueSanitized HttpResponse mimetype=text/plain responseBody="

hello

" + resp = Response("

hello

", headers={"Content-TYPE": "text/html"}, mimetype="text/plain") # $ headerWriteBulk=Dict headerWriteBulkUnsanitized=name headerWriteNameUnsanitized="Content-TYPE" headerWriteValue="text/html" HttpResponse mimetype=text/plain responseBody="

hello

" return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp @@ -208,7 +208,7 @@ def setting_cookie(): # $requestHandler resp = make_response() # $ HttpResponse mimetype=text/html resp.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value" resp.set_cookie(key="key", value="value") # $ CookieWrite CookieName="key" CookieValue="value" - resp.headers.add("Set-Cookie", "key2=value2") # $ headerWriteNameUnsanitized="Set-Cookie" headerWriteValueSanitized="key2=value2" MISSING: CookieWrite CookieRawHeader="key2=value2" + resp.headers.add("Set-Cookie", "key2=value2") # $ headerWriteNameUnsanitized="Set-Cookie" headerWriteValue="key2=value2" CookieWrite CookieRawHeader="key2=value2" resp.delete_cookie("key3") # $ CookieWrite CookieName="key3" resp.delete_cookie(key="key3") # $ CookieWrite CookieName="key3" return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp @@ -220,29 +220,29 @@ def setting_cookie(): # $requestHandler @app.route("/headers") # $routeSetup="/headers" def headers(): # $requestHandler resp1 = Response() # $ HttpResponse mimetype=text/html - resp1.headers["X-MyHeader"] = "a" # $ headerWriteNameUnsanitized="X-MyHeader" headerWriteValueSanitized="a" + resp1.headers["X-MyHeader"] = "a" # $ headerWriteNameUnsanitized="X-MyHeader" headerWriteValue="a" resp2 = make_response() # $ HttpResponse mimetype=text/html - resp2.headers["X-MyHeader"] = "aa" # $ headerWriteNameUnsanitized="X-MyHeader" headerWriteValueSanitized="aa" - resp2.headers.extend({"X-MyHeader2": "b"}) # $ headerWriteBulk=Dict headerWriteNameUnsanitized headerWriteValueSanitized - resp3 = make_response("hello", 200, {"X-MyHeader3": "c"}) # $ HttpResponse mimetype=text/html responseBody="hello" headerWriteBulk=Dict headerWriteNameUnsanitized headerWriteValueSanitized - resp4 = make_response("hello", {"X-MyHeader4": "d"}) # $ HttpResponse mimetype=text/html responseBody="hello" headerWriteBulk=Dict headerWriteNameUnsanitized headerWriteValueSanitized - resp5 = Response(headers={"X-MyHeader5":"e"}) # $ HttpResponse mimetype=text/html headerWriteBulk=Dict headerWriteNameUnsanitized headerWriteValueSanitized + resp2.headers["X-MyHeader"] = "aa" # $ headerWriteNameUnsanitized="X-MyHeader" headerWriteValue="aa" + resp2.headers.extend({"X-MyHeader2": "b"}) # $ headerWriteBulk=Dict headerWriteBulkUnsanitized=name headerWriteNameUnsanitized="X-MyHeader2" headerWriteValue="b" + resp3 = make_response("hello", 200, {"X-MyHeader3": "c"}) # $ HttpResponse mimetype=text/html responseBody="hello" headerWriteBulk=Dict headerWriteBulkUnsanitized=name headerWriteNameUnsanitized="X-MyHeader3" headerWriteValue="c" + resp4 = make_response("hello", {"X-MyHeader4": "d"}) # $ HttpResponse mimetype=text/html responseBody="hello" headerWriteBulk=Dict headerWriteBulkUnsanitized=name headerWriteNameUnsanitized="X-MyHeader4" headerWriteValue="d" + resp5 = Response(headers={"X-MyHeader5":"e"}) # $ HttpResponse mimetype=text/html headerWriteBulk=Dict headerWriteBulkUnsanitized=name headerWriteBulkUnsanitized=name headerWriteNameUnsanitized="X-MyHeader5" headerWriteValue="e" return resp5 # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp5 @app.route("/werkzeug-headers") # $routeSetup="/werkzeug-headers" def werkzeug_headers(): # $requestHandler response = Response() # $ HttpResponse mimetype=text/html headers = Headers() - headers.add("X-MyHeader1", "a") # $ headerWriteNameUnsanitized="X-MyHeader1" headerWriteValueSanitized="a" - headers.add_header("X-MyHeader2", "b") # $ headerWriteNameUnsanitized="X-MyHeader2" headerWriteValueSanitized="b" - headers.set("X-MyHeader3", "c") # $ headerWriteNameUnsanitized="X-MyHeader3" headerWriteValueSanitized="c" - headers.setdefault("X-MyHeader4", "d") # $ headerWriteNameUnsanitized="X-MyHeader4" headerWriteValueSanitized="d" - headers.__setitem__("X-MyHeader5", "e") # $ headerWriteNameUnsanitized="X-MyHeader5" headerWriteValueSanitized="e" - headers["X-MyHeader6"] = "f" # $ headerWriteNameUnsanitized="X-MyHeader6" headerWriteValueSanitized="f" - h1 = {"X-MyHeader7": "g"} - headers.extend(h1) # $ headerWriteBulk=h1 headerWriteNameUnsanitized headerWriteValueSanitized - h2 = [("X-MyHeader8", "h")] - headers.extend(h2) # $ headerWriteBulk=h2 headerWriteNameUnsanitized headerWriteValueSanitized + headers.add("X-MyHeader1", "a") # $ headerWriteNameUnsanitized="X-MyHeader1" headerWriteValue="a" + headers.add_header("X-MyHeader2", "b") # $ headerWriteNameUnsanitized="X-MyHeader2" headerWriteValue="b" + headers.set("X-MyHeader3", "c") # $ headerWriteNameUnsanitized="X-MyHeader3" headerWriteValue="c" + headers.setdefault("X-MyHeader4", "d") # $ headerWriteNameUnsanitized="X-MyHeader4" headerWriteValue="d" + headers.__setitem__("X-MyHeader5", "e") # $ headerWriteNameUnsanitized="X-MyHeader5" headerWriteValue="e" + headers["X-MyHeader6"] = "f" # $ headerWriteNameUnsanitized="X-MyHeader6" headerWriteValue="f" + h1 = {"X-MyHeader7": "g"} # $ headerWriteNameUnsanitized="X-MyHeader7" headerWriteValue="g" + headers.extend(h1) # $ headerWriteBulk=h1 headerWriteBulkUnsanitized=name + h2 = [("X-MyHeader8", "h")] # $ headerWriteNameUnsanitized="X-MyHeader8" headerWriteValue="h" + headers.extend(h2) # $ headerWriteBulk=h2 headerWriteBulkUnsanitized=name response.headers = headers return response # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=response diff --git a/python/ql/test/library-tests/frameworks/rest_framework/response_test.py b/python/ql/test/library-tests/frameworks/rest_framework/response_test.py index ec093499df63..3e4f821693bf 100644 --- a/python/ql/test/library-tests/frameworks/rest_framework/response_test.py +++ b/python/ql/test/library-tests/frameworks/rest_framework/response_test.py @@ -28,7 +28,7 @@ def setting_cookie(request): resp = Response() # $ HttpResponse resp.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value" resp.set_cookie(key="key4", value="value") # $ CookieWrite CookieName="key4" CookieValue="value" - resp.headers["Set-Cookie"] = "key2=value2" # $ MISSING: CookieWrite CookieRawHeader="key2=value2" + resp.headers["Set-Cookie"] = "key2=value2" # $ headerWriteName="Set-Cookie" headerWriteValue="key2=value2" CookieWrite CookieRawHeader="key2=value2" resp.cookies["key3"] = "value3" # $ CookieWrite CookieName="key3" CookieValue="value3" resp.delete_cookie("key4") # $ CookieWrite CookieName="key4" resp.delete_cookie(key="key4") # $ CookieWrite CookieName="key4" diff --git a/python/ql/test/library-tests/frameworks/rest_framework/testapp/views.py b/python/ql/test/library-tests/frameworks/rest_framework/testapp/views.py index 6affb5dac4b9..6ce06fdba31e 100644 --- a/python/ql/test/library-tests/frameworks/rest_framework/testapp/views.py +++ b/python/ql/test/library-tests/frameworks/rest_framework/testapp/views.py @@ -70,7 +70,7 @@ def cookie_test(request: Request): # $ requestHandler resp = Response("wat") # $ HttpResponse resp.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value" resp.set_cookie(key="key4", value="value") # $ CookieWrite CookieName="key4" CookieValue="value" - resp.headers["Set-Cookie"] = "key2=value2" # $ MISSING: CookieWrite CookieRawHeader="key2=value2" + resp.headers["Set-Cookie"] = "key2=value2" # $ headerWriteName="Set-Cookie" headerWriteValue="key2=value2" CookieWrite CookieRawHeader="key2=value2" resp.cookies["key3"] = "value3" # $ CookieWrite CookieName="key3" CookieValue="value3" return resp diff --git a/python/ql/test/library-tests/frameworks/stdlib/wsgiref_simple_server_test.py b/python/ql/test/library-tests/frameworks/stdlib/wsgiref_simple_server_test.py index 6a2031699f42..7327385c0647 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/wsgiref_simple_server_test.py +++ b/python/ql/test/library-tests/frameworks/stdlib/wsgiref_simple_server_test.py @@ -18,7 +18,7 @@ def func(environ, start_response): # $ requestHandler environ, # $ tainted environ["PATH_INFO"], # $ tainted ) - write = start_response("200 OK", [("Content-Type", "text/plain")]) # $ headerWriteBulk=List headerWriteNameUnsanitized headerWriteValueUnsanitized + write = start_response("200 OK", [("Content-Type", "text/plain")]) # $ headerWriteBulk=List headerWriteBulkUnsanitized=name,value headerWriteNameUnsanitized="Content-Type" headerWriteValueUnsanitized="text/plain" write(b"hello") # $ HttpResponse responseBody=b"hello" write(data=b" ") # $ HttpResponse responseBody=b" " @@ -33,16 +33,16 @@ def __init__(self): self.set_app(self.my_method) def my_method(self, _env, start_response): # $ requestHandler - start_response("200 OK", []) # $ headerWriteBulk=List headerWriteNameUnsanitized headerWriteValueUnsanitized + start_response("200 OK", []) # $ headerWriteBulk=List headerWriteBulkUnsanitized=name,value return [b"my_method"] # $ HttpResponse responseBody=List def func2(environ, start_response): # $ requestHandler - headers = wsgiref.headers.Headers([("Content-Type", "text/plain")]) # $ headerWriteBulk=List headerWriteNameUnsanitized headerWriteValueUnsanitized + headers = wsgiref.headers.Headers([("Content-Type", "text/plain")]) # $ headerWriteBulk=List headerWriteBulkUnsanitized=name,value headerWriteNameUnsanitized="Content-Type" headerWriteValueUnsanitized="text/plain" headers.add_header("X-MyHeader", "a") # $ headerWriteNameUnsanitized="X-MyHeader" headerWriteValueUnsanitized="a" headers.setdefault("X-MyHeader2", "b") # $ headerWriteNameUnsanitized="X-MyHeader2" headerWriteValueUnsanitized="b" headers.__setitem__("X-MyHeader3", "c") # $ headerWriteNameUnsanitized="X-MyHeader3" headerWriteValueUnsanitized="c" headers["X-MyHeader4"] = "d" # $ headerWriteNameUnsanitized="X-MyHeader4" headerWriteValueUnsanitized="d" - start_response(status, headers) # $ headerWriteBulk=headers headerWriteNameUnsanitized headerWriteValueUnsanitized + start_response(status, headers) # $ headerWriteBulk=headers headerWriteBulkUnsanitized=name,value return [b"Hello"] # $ HttpResponse responseBody=List case = sys.argv[1] @@ -54,7 +54,7 @@ def func2(environ, start_response): # $ requestHandler elif case == "3": server = MyServer() def func3(_env, start_response): # $ requestHandler - start_response("200 OK", []) # $ headerWriteBulk=List headerWriteNameUnsanitized headerWriteValueUnsanitized + start_response("200 OK", []) # $ headerWriteBulk=List headerWriteBulkUnsanitized=name,value return [b"foo"] # $ HttpResponse responseBody=List server.set_app(func3) elif case == "4": diff --git a/python/ql/test/library-tests/frameworks/tornado/response_test.py b/python/ql/test/library-tests/frameworks/tornado/response_test.py index 1ca37ed773c8..a1054f28dc96 100644 --- a/python/ql/test/library-tests/frameworks/tornado/response_test.py +++ b/python/ql/test/library-tests/frameworks/tornado/response_test.py @@ -24,10 +24,10 @@ def get(self): # $ requestHandler # what matters. self.write("foo") # $ HttpResponse mimetype=text/html responseBody="foo" - self.set_header("Content-Type", "text/plain; charset=utf-8") + self.set_header("Content-Type", "text/plain; charset=utf-8") # $ headerWriteName="Content-Type" headerWriteValue="text/plain; charset=utf-8" def post(self): # $ requestHandler - self.set_header("Content-Type", "text/plain; charset=utf-8") + self.set_header("Content-Type", "text/plain; charset=utf-8") # $ headerWriteName="Content-Type" headerWriteValue="text/plain; charset=utf-8" self.write("foo") # $ HttpResponse responseBody="foo" MISSING: mimetype=text/plain SPURIOUS: mimetype=text/html @@ -67,7 +67,10 @@ def get(self): # $ requestHandler self.write("foo") # $ HttpResponse mimetype=text/html responseBody="foo" self.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value" self.set_cookie(name="key", value="value") # $ CookieWrite CookieName="key" CookieValue="value" - self.set_header("Set-Cookie", "key2=value2") # $ MISSING: CookieWrite CookieRawHeader="key2=value2" + self.set_header("Set-Cookie", "key2=value2") # $ headerWriteName="Set-Cookie" headerWriteValue="key2=value2" CookieWrite CookieRawHeader="key2=value2" + self.add_header("Set-Cookie", "key3=value3") # $ headerWriteName="Set-Cookie" headerWriteValue="key3=value3" CookieWrite CookieRawHeader="key3=value3" + self.request.headers.add("Set-Cookie", "key4=value4") # $ headerWriteName="Set-Cookie" headerWriteValue="key4=value4" CookieWrite CookieRawHeader="key4=value4" + self.request.headers["Set-Cookie"] = "key5=value5" # $ headerWriteName="Set-Cookie" headerWriteValue="key5=value5" CookieWrite CookieRawHeader="key5=value5" def make_app(): diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 140cdd2cdba6..865dc997f3a6 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/released/1.0.4.md b/ruby/ql/lib/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index c0bc6ac243d7..7bde4c8f9ac9 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -2183,8 +2183,6 @@ class NodeRegion instanceof Unit { string toString() { result = "NodeRegion" } predicate contains(Node n) { none() } - - int totalOrder() { result = 1 } } /** diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 8f4de8dc2509..bf914c07196d 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 1.0.3 +version: 1.0.4 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 766deb435824..ac5d0c7525c0 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.0.4.md b/ruby/ql/src/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 0418e3e32ed1..3ef18acf2317 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.0.3 +version: 1.0.4 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index dab49cbe6077..047afa97e510 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/1.0.4.md b/shared/controlflow/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/controlflow/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index b04834d07e09..0b055d4c623d 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index ae88f0beac81..ca6c7165b9bf 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/1.0.4.md b/shared/dataflow/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/dataflow/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 3dbe095f2f55..434fca9c995f 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -4,7 +4,6 @@ private import codeql.util.Location private import codeql.util.Option private import codeql.util.Unit private import codeql.util.Option -private import codeql.util.internal.MakeSets module MakeImplCommon Lang> { private import Lang @@ -502,24 +501,21 @@ module MakeImplCommon Lang> { ) } - private module CallSetsInput implements MkSetsInputSig { - class Key = TCallEdge; + private DataFlowCall getACallWithReducedViableImpl(TCallEdge ctxEdge) { + exists(DataFlowCall ctx, DataFlowCallable c | + ctxEdge = TMkCallEdge(ctx, c) and + reducedViableImplInCallContext(result, c, ctx) + ) + } - class Value = DataFlowCall; + private module CallSets = + QlBuiltins::InternSets; - DataFlowCall getAValue(TCallEdge ctxEdge) { - exists(DataFlowCall ctx, DataFlowCallable c | - ctxEdge = TMkCallEdge(ctx, c) and - reducedViableImplInCallContext(result, c, ctx) - ) - } - - int totalorder(DataFlowCall e) { result = callOrder(e) } + private class CallSet0 extends CallSets::Set { + string toString() { result = "CallSet" } } - private module CallSets = MakeSets; - - private module CallSetOption = Option; + private module CallSetOption = Option; /** * A set of call sites for which dispatch is affected by the call context. @@ -528,26 +524,23 @@ module MakeImplCommon Lang> { */ private class CallSet = CallSetOption::Option; - private module DispatchSetsInput implements MkSetsInputSig { - class Key = TCallEdge; - - class Value = TCallEdge; + private TCallEdge getAReducedViableEdge(TCallEdge ctxEdge) { + exists(DataFlowCall ctx, DataFlowCallable c, DataFlowCall call, DataFlowCallable tgt | + ctxEdge = mkCallEdge(ctx, c) and + result = mkCallEdge(call, tgt) and + viableImplInCallContextExtIn(call, ctx) = tgt and + reducedViableImplInCallContext(call, c, ctx) + ) + } - TCallEdge getAValue(TCallEdge ctxEdge) { - exists(DataFlowCall ctx, DataFlowCallable c, DataFlowCall call, DataFlowCallable tgt | - ctxEdge = mkCallEdge(ctx, c) and - result = mkCallEdge(call, tgt) and - viableImplInCallContextExtIn(call, ctx) = tgt and - reducedViableImplInCallContext(call, c, ctx) - ) - } + private module DispatchSets = + QlBuiltins::InternSets; - int totalorder(TCallEdge e) { result = edgeOrder(e) } + private class DispatchSet0 extends DispatchSets::Set { + string toString() { result = "DispatchSet" } } - private module DispatchSets = MakeSets; - - private module DispatchSetsOption = Option; + private module DispatchSetsOption = Option; /** * A set of call edges that are allowed in the call context. This applies to @@ -561,7 +554,7 @@ module MakeImplCommon Lang> { private class DispatchSet = DispatchSetsOption::Option; private predicate relevantCtx(TCallEdge ctx) { - exists(CallSets::getValueSet(ctx)) or exists(getUnreachableSet(ctx)) + exists(CallSets::getSet(ctx)) or exists(getUnreachableSet(ctx)) } pragma[nomagic] @@ -570,14 +563,14 @@ module MakeImplCommon Lang> { ) { relevantCtx(ctx) and ( - CallSets::getValueSet(ctx) = calls.asSome() + CallSets::getSet(ctx) = calls.asSome() or - not exists(CallSets::getValueSet(ctx)) and calls.isNone() + not exists(CallSets::getSet(ctx)) and calls.isNone() ) and ( - DispatchSets::getValueSet(ctx) = tgts.asSome() + DispatchSets::getSet(ctx) = tgts.asSome() or - not exists(DispatchSets::getValueSet(ctx)) and tgts.isNone() + not exists(DispatchSets::getSet(ctx)) and tgts.isNone() ) and ( getUnreachableSet(ctx) = unreachable.asSome() @@ -1515,40 +1508,20 @@ module MakeImplCommon Lang> { newtype TCallEdge = TMkCallEdge(DataFlowCall call, DataFlowCallable tgt) { viableCallableExt(call) = tgt } - cached - int edgeOrder(TCallEdge edge) { - edge = - rank[result](TCallEdge e, DataFlowCall call, DataFlowCallable tgt | - e = TMkCallEdge(call, tgt) - | - e order by call.totalorder(), tgt.totalorder() - ) - } - - cached - int callOrder(DataFlowCall call) { result = call.totalorder() } - - private module UnreachableSetsInput implements MkSetsInputSig { - class Key = TCallEdge; - - class Value = NodeRegion; - - NodeRegion getAValue(TCallEdge edge) { - exists(DataFlowCall call, DataFlowCallable tgt | - edge = mkCallEdge(call, tgt) and - getNodeRegionEnclosingCallable(result) = tgt and - isUnreachableInCallCached(result, call) - ) - } - - int totalorder(NodeRegion nr) { result = nr.totalOrder() } + private NodeRegion getAnUnreachableRegion(TCallEdge edge) { + exists(DataFlowCall call, DataFlowCallable tgt | + edge = mkCallEdge(call, tgt) and + getNodeRegionEnclosingCallable(result) = tgt and + isUnreachableInCallCached(result, call) + ) } - private module UnreachableSets = MakeSets; + private module UnreachableSets = + QlBuiltins::InternSets; /** A set of nodes that is unreachable in some call context. */ cached - class UnreachableSet instanceof UnreachableSets::ValueSet { + class UnreachableSet instanceof UnreachableSets::Set { cached string toString() { result = "Unreachable" } @@ -1562,7 +1535,7 @@ module MakeImplCommon Lang> { } cached - UnreachableSet getUnreachableSet(TCallEdge edge) { result = UnreachableSets::getValueSet(edge) } + UnreachableSet getUnreachableSet(TCallEdge edge) { result = UnreachableSets::getSet(edge) } private module UnreachableSetOption = Option; @@ -1579,7 +1552,7 @@ module MakeImplCommon Lang> { cached newtype TLocalFlowCallContext = TAnyLocalCall() or - TSpecificLocalCall(UnreachableSets::ValueSet ns) + TSpecificLocalCall(UnreachableSets::Set ns) cached newtype TReturnKindExt = diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 3d33138d8544..283e277909d3 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 1b49bf2fb068..8680f86e786b 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.4.md b/shared/mad/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index ef13b3c07cc2..8167a79b21bc 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 5093ac17ebd2..a33a857c9057 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.4.md b/shared/rangeanalysis/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index f538c353e1bc..9490c61761c9 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index bc4c3b902b9a..d78925faba07 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.4.md b/shared/regex/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 71afb62ea541..b12651a80358 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 397322fcfd8a..1a64a39471c8 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.4.md b/shared/ssa/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/ssa/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 4e61d61efa71..fd785540a371 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1163,4 +1163,515 @@ module Make Input> { ) } } + + /** Provides the input to `DataFlowIntegration`. */ + signature module DataFlowIntegrationInputSig { + /** + * An expression with a value. That is, we expect these expressions to be + * represented in the data flow graph. + */ + class Expr { + /** Gets a textual representation of this expression. */ + string toString(); + + /** Holds if the `i`th node of basic block `bb` evaluates this expression. */ + predicate hasCfgNode(BasicBlock bb, int i); + } + + /** + * Gets a read of SSA definition `def`. + * + * Override this with a cached version when applicable. + */ + default Expr getARead(Definition def) { + exists(SourceVariable v, BasicBlock bb, int i | + ssaDefReachesRead(v, def, bb, i) and + variableRead(bb, i, v, true) and + result.hasCfgNode(bb, i) + ) + } + + /** Holds if SSA definition `def` assigns `value` to the underlying variable. */ + predicate ssaDefAssigns(WriteDefinition def, Expr value); + + /** A parameter. */ + class Parameter { + /** Gets a textual representation of this parameter. */ + string toString(); + + /** Gets the location of this parameter. */ + Location getLocation(); + } + + /** Holds if SSA definition `def` initializes parameter `p` at function entry. */ + predicate ssaDefInitializesParam(WriteDefinition def, Parameter p); + + /** + * Holds if flow should be allowed into uncertain SSA definition `def` from + * previous definitions or reads. + */ + default predicate allowFlowIntoUncertainDef(UncertainWriteDefinition def) { none() } + + /** A (potential) guard. */ + class Guard { + /** Gets a textual representation of this guard. */ + string toString(); + + /** Holds if the `i`th node of basic block `bb` evaluates this guard. */ + predicate hasCfgNode(BasicBlock bb, int i); + } + + /** Holds if `guard` controls block `bb` upon evaluating to `branch`. */ + predicate guardControlsBlock(Guard guard, BasicBlock bb, boolean branch); + + /** Gets an immediate conditional successor of basic block `bb`, if any. */ + BasicBlock getAConditionalBasicBlockSuccessor(BasicBlock bb, boolean branch); + } + + /** + * Constructs the type `Node` and associated value step relations, which are + * intended to be included in the `DataFlow::Node` type and local step relations. + * + * Additionally, this module also provides a barrier guards implementation. + */ + module DataFlowIntegration { + private import codeql.util.Boolean + + pragma[nomagic] + private predicate adjacentDefReachesReadExt( + DefinitionExt def, SourceVariable v, BasicBlock bb1, int i1, BasicBlock bb2, int i2 + ) { + adjacentDefReadExt(def, v, bb1, i1, bb2, i2) and + ( + def.definesAt(v, bb1, i1, _) + or + variableRead(bb1, i1, v, true) + ) + or + exists(BasicBlock bb3, int i3 | + adjacentDefReachesReadExt(def, v, bb1, i1, bb3, i3) and + variableRead(bb3, i3, v, false) and + adjacentDefReadExt(def, v, bb3, i3, bb2, i2) + ) + } + + pragma[nomagic] + private predicate adjacentDefReachesUncertainReadExt( + DefinitionExt def, SourceVariable v, BasicBlock bb1, int i1, BasicBlock bb2, int i2 + ) { + adjacentDefReachesReadExt(def, v, bb1, i1, bb2, i2) and + variableRead(bb2, i2, v, false) + } + + /** + * Holds if the reference to `def` at index `i` in basic block `bb` can reach + * another definition `next` of the same underlying source variable, without + * passing through another write or non-pseudo read. + * + * The reference is either a read of `def` or `def` itself. + */ + pragma[nomagic] + private predicate lastRefBeforeRedefExt( + DefinitionExt def, SourceVariable v, BasicBlock bb, int i, BasicBlock input, + DefinitionExt next + ) { + lastRefRedefExt(def, v, bb, i, input, next) and + not variableRead(bb, i, v, false) + or + exists(BasicBlock bb0, int i0 | + lastRefRedefExt(def, v, bb0, i0, input, next) and + adjacentDefReachesUncertainReadExt(def, v, bb, i, bb0, i0) + ) + } + + /** Same as `adjacentDefReadExt`, but skips uncertain reads. */ + pragma[nomagic] + private predicate adjacentDefSkipUncertainReadsExt( + DefinitionExt def, SourceVariable v, BasicBlock bb1, int i1, BasicBlock bb2, int i2 + ) { + adjacentDefReachesReadExt(def, v, bb1, i1, bb2, i2) and + variableRead(bb2, i2, v, true) + } + + pragma[nomagic] + private predicate adjacentReadPairExt(DefinitionExt def, ReadNode read1, ReadNode read2) { + exists(SourceVariable v, BasicBlock bb1, int i1, BasicBlock bb2, int i2 | + read1.readsAt(bb1, i1, v) and + adjacentDefSkipUncertainReadsExt(def, v, bb1, i1, bb2, i2) and + read2.readsAt(bb2, i2, v) + ) + } + + final private class DefinitionExtFinal = DefinitionExt; + + /** An SSA definition into which another SSA definition may flow. */ + private class SsaInputDefinitionExt extends DefinitionExtFinal { + SsaInputDefinitionExt() { + this instanceof PhiNode + or + this instanceof PhiReadNode + or + DfInput::allowFlowIntoUncertainDef(this) + } + + /** Holds if `def` may flow into this definition via basic block `input`. */ + predicate hasInputFromBlock( + DefinitionExt def, SourceVariable v, BasicBlock bb, int i, BasicBlock input + ) { + lastRefBeforeRedefExt(def, v, bb, i, input, this) + } + } + + cached + private DefinitionExt getAPhiInputDef(SsaInputDefinitionExt phi, BasicBlock bb) { + phi.hasInputFromBlock(result, _, _, _, bb) + } + + private newtype TNode = + TParamNode(DfInput::Parameter p) { + exists(WriteDefinition def | DfInput::ssaDefInitializesParam(def, p)) + } or + TExprNode(DfInput::Expr e, Boolean isPost) { + e = DfInput::getARead(_) + or + exists(DefinitionExt def | + DfInput::ssaDefAssigns(def, e) and + isPost = false + ) + } or + TSsaDefinitionNode(DefinitionExt def) or + TSsaInputNode(SsaInputDefinitionExt phi, BasicBlock input) { + exists(getAPhiInputDef(phi, input)) + } + + /** + * A data flow node that we need to reference in the value step relation. + * + * Note that only the `SsaNode` subclass is expected to be added as additional + * nodes in `DataFlow::Node`. The other subclasses are expected to already be + * present and are included here in order to reference them in the step relation. + */ + abstract private class NodeImpl extends TNode { + /** Gets the location of this node. */ + abstract Location getLocation(); + + /** Gets a textual representation of this node. */ + abstract string toString(); + } + + final class Node = NodeImpl; + + /** A parameter node. */ + private class ParameterNodeImpl extends NodeImpl, TParamNode { + private DfInput::Parameter p; + + ParameterNodeImpl() { this = TParamNode(p) } + + /** Gets the underlying parameter. */ + DfInput::Parameter getParameter() { result = p } + + override string toString() { result = p.toString() } + + override Location getLocation() { result = p.getLocation() } + } + + final class ParameterNode = ParameterNodeImpl; + + /** A (post-update) expression node. */ + abstract private class ExprNodePreOrPostImpl extends NodeImpl, TExprNode { + DfInput::Expr e; + boolean isPost; + + ExprNodePreOrPostImpl() { this = TExprNode(e, isPost) } + + /** Gets the underlying expression. */ + DfInput::Expr getExpr() { result = e } + + override Location getLocation() { + exists(BasicBlock bb, int i | + e.hasCfgNode(bb, i) and + result = bb.getNode(i).getLocation() + ) + } + } + + final class ExprNodePreOrPost = ExprNodePreOrPostImpl; + + /** An expression node. */ + private class ExprNodeImpl extends ExprNodePreOrPostImpl { + ExprNodeImpl() { isPost = false } + + override string toString() { result = e.toString() } + } + + final class ExprNode = ExprNodeImpl; + + /** A post-update expression node. */ + private class ExprPostUpdateNodeImpl extends ExprNodePreOrPostImpl { + ExprPostUpdateNodeImpl() { isPost = true } + + /** Gets the pre-update expression node. */ + ExprNode getPreUpdateNode() { result = TExprNode(e, false) } + + override string toString() { result = e.toString() + " [postupdate]" } + } + + final class ExprPostUpdateNode = ExprPostUpdateNodeImpl; + + private class ReadNodeImpl extends ExprNodeImpl { + private BasicBlock bb_; + private int i_; + private SourceVariable v_; + + ReadNodeImpl() { + variableRead(bb_, i_, v_, true) and + this.getExpr().hasCfgNode(bb_, i_) + } + + SourceVariable getVariable() { result = v_ } + + pragma[nomagic] + predicate readsAt(BasicBlock bb, int i, SourceVariable v) { + bb = bb_ and + i = i_ and + v = v_ + } + } + + final private class ReadNode = ReadNodeImpl; + + /** A synthesized SSA data flow node. */ + abstract private class SsaNodeImpl extends NodeImpl { + /** Gets the underlying SSA definition. */ + abstract DefinitionExt getDefinitionExt(); + } + + final class SsaNode = SsaNodeImpl; + + /** An SSA definition, viewed as a node in a data flow graph. */ + private class SsaDefinitionExtNodeImpl extends SsaNodeImpl, TSsaDefinitionNode { + private DefinitionExt def; + + SsaDefinitionExtNodeImpl() { this = TSsaDefinitionNode(def) } + + override DefinitionExt getDefinitionExt() { result = def } + + override Location getLocation() { result = def.getLocation() } + + override string toString() { result = def.toString() } + } + + final class SsaDefinitionExtNode = SsaDefinitionExtNodeImpl; + + /** + * A node that represents an input to an SSA phi (read) definition. + * + * This allows for barrier guards to filter input to phi nodes. For example, in + * + * ```rb + * x = taint + * if x != "safe" then + * x = "safe" + * end + * sink x + * ``` + * + * the `false` edge out of `x != "safe"` guards the input from `x = taint` into the + * `phi` node after the condition. + * + * It is also relevant to filter input into phi read nodes: + * + * ```rb + * x = taint + * if b then + * if x != "safe1" then + * return + * end + * else + * if x != "safe2" then + * return + * end + * end + * + * sink x + * ``` + * + * both inputs into the phi read node after the outer condition are guarded. + */ + private class SsaInputNodeImpl extends SsaNodeImpl, TSsaInputNode { + private SsaInputDefinitionExt def_; + private BasicBlock input_; + + SsaInputNodeImpl() { this = TSsaInputNode(def_, input_) } + + /** Holds if this node represents input into SSA definition `def` via basic block `input`. */ + predicate isInputInto(DefinitionExt def, BasicBlock input) { + def = def_ and + input = input_ + } + + override SsaInputDefinitionExt getDefinitionExt() { result = def_ } + + override Location getLocation() { result = input_.getNode(input_.length() - 1).getLocation() } + + override string toString() { result = "[input] " + def_.toString() } + } + + final class SsaInputNode = SsaInputNodeImpl; + + /** + * Holds if `nodeFrom` is a node for SSA definition `def`, which can input + * node `nodeTo`. + */ + pragma[nomagic] + private predicate inputFromDef( + DefinitionExt def, SsaDefinitionExtNode nodeFrom, SsaInputNode nodeTo + ) { + exists(SourceVariable v, BasicBlock bb, int i, BasicBlock input, SsaInputDefinitionExt next | + next.hasInputFromBlock(def, v, bb, i, input) and + def = nodeFrom.getDefinitionExt() and + def.definesAt(v, bb, i, _) and + nodeTo = TSsaInputNode(next, input) + ) + } + + /** + * Holds if `nodeFrom` is a last read of SSA definition `def`, which + * can reach input node `nodeTo`. + */ + pragma[nomagic] + private predicate inputFromRead(DefinitionExt def, ReadNode nodeFrom, SsaInputNode nodeTo) { + exists(SourceVariable v, BasicBlock bb, int i, BasicBlock input, SsaInputDefinitionExt next | + next.hasInputFromBlock(def, v, bb, i, input) and + nodeFrom.readsAt(bb, i, v) and + nodeTo = TSsaInputNode(next, input) + ) + } + + pragma[nomagic] + private predicate firstReadExt(DefinitionExt def, ReadNode read) { + exists(SourceVariable v, BasicBlock bb1, int i1, BasicBlock bb2, int i2 | + def.definesAt(v, bb1, i1, _) and + adjacentDefSkipUncertainReadsExt(def, v, bb1, i1, bb2, i2) and + read.readsAt(bb2, i2, v) + ) + } + + /** + * Holds if there is a local flow step from `nodeFrom` to `nodeTo`. + * + * `isUseStep` is `true` when `nodeFrom` is a (post-update) read node and + * `nodeTo` is a read node or phi (read) node. + */ + predicate localFlowStep(DefinitionExt def, Node nodeFrom, Node nodeTo, boolean isUseStep) { + ( + // Flow from assignment into SSA definition + DfInput::ssaDefAssigns(def, nodeFrom.(ExprNode).getExpr()) + or + // Flow from parameter into entry definition + DfInput::ssaDefInitializesParam(def, nodeFrom.(ParameterNode).getParameter()) + ) and + nodeTo.(SsaDefinitionExtNode).getDefinitionExt() = def and + isUseStep = false + or + // Flow from SSA definition to first read + def = nodeFrom.(SsaDefinitionExtNode).getDefinitionExt() and + firstReadExt(def, nodeTo) and + isUseStep = false + or + // Flow from (post-update) read to next read + adjacentReadPairExt(def, [nodeFrom, nodeFrom.(ExprPostUpdateNode).getPreUpdateNode()], nodeTo) and + nodeFrom != nodeTo and + isUseStep = true + or + // Flow into phi (read) SSA definition node from def + inputFromDef(def, nodeFrom, nodeTo) and + isUseStep = false + or + // Flow into phi (read) SSA definition node from (post-update) read + inputFromRead(def, [nodeFrom, nodeFrom.(ExprPostUpdateNode).getPreUpdateNode()], nodeTo) and + isUseStep = true + or + // Flow from input node to def + nodeTo.(SsaDefinitionExtNode).getDefinitionExt() = def and + def = nodeFrom.(SsaInputNode).getDefinitionExt() and + isUseStep = false + } + + /** Holds if the value of `nodeTo` is given by `nodeFrom`. */ + predicate localMustFlowStep(DefinitionExt def, Node nodeFrom, Node nodeTo) { + ( + // Flow from assignment into SSA definition + DfInput::ssaDefAssigns(def, nodeFrom.(ExprNode).getExpr()) + or + // Flow from parameter into entry definition + DfInput::ssaDefInitializesParam(def, nodeFrom.(ParameterNode).getParameter()) + ) and + nodeTo.(SsaDefinitionExtNode).getDefinitionExt() = def + or + // Flow from SSA definition to read + nodeFrom.(SsaDefinitionExtNode).getDefinitionExt() = def and + nodeTo.(ExprNode).getExpr() = DfInput::getARead(def) + } + + /** + * Holds if the guard `g` validates the expression `e` upon evaluating to `branch`. + * + * The expression `e` is expected to be a syntactic part of the guard `g`. + * For example, the guard `g` might be a call `isSafe(x)` and the expression `e` + * the argument `x`. + */ + signature predicate guardChecksSig(DfInput::Guard g, DfInput::Expr e, boolean branch); + + pragma[nomagic] + private Definition getAPhiInputDef(SsaInputNode n) { + exists(SsaInputDefinitionExt phi, BasicBlock bb | + result = getAPhiInputDef(phi, bb) and + n.isInputInto(phi, bb) + ) + } + + /** + * Provides a set of barrier nodes for a guard that validates an expression. + * + * This is expected to be used in `isBarrier`/`isSanitizer` definitions + * in data flow and taint tracking. + */ + module BarrierGuard { + pragma[nomagic] + private predicate guardChecksSsaDef(DfInput::Guard g, Definition def, boolean branch) { + guardChecks(g, DfInput::getARead(def), branch) + } + + /** Gets a node that is safely guarded by the given guard check. */ + pragma[nomagic] + Node getABarrierNode() { + exists(DfInput::Guard g, boolean branch, Definition def, BasicBlock bb | + guardChecksSsaDef(g, def, branch) + | + // guard controls a read + exists(DfInput::Expr e | + e = DfInput::getARead(def) and + e.hasCfgNode(bb, _) and + DfInput::guardControlsBlock(g, bb, branch) and + result.(ExprNode).getExpr() = e + ) + or + // guard controls input block to a phi node + exists(SsaInputDefinitionExt phi | + def = getAPhiInputDef(result) and + result.(SsaInputNode).isInputInto(phi, bb) + | + DfInput::guardControlsBlock(g, bb, branch) + or + exists(int last | + last = bb.length() - 1 and + g.hasCfgNode(bb, last) and + DfInput::getAConditionalBasicBlockSuccessor(bb, branch) = phi.getBasicBlock() + ) + ) + ) + } + } + } } diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 3200088a878a..efdee4d845a1 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 86a6976ddc7c..bdc66d513224 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.4.md b/shared/threat-models/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 01fdd3ca581d..fc944afcd9c5 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.3 +version: 1.0.4 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 6212f4cebc70..ad8f62a4e9d5 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.4.md b/shared/tutorial/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 926b30b00f6b..eb3fbc4b6f68 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.3 +version: 1.0.4 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 4cf16f9cb1e6..b9366dadb5c1 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.4.md b/shared/typeflow/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index e3cece67cbf7..4f43727f40da 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 7a288c03bd9b..d17f150b27b2 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/1.0.4.md b/shared/typetracking/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/typetracking/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 85f2789a9b3c..14b58f18a559 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 27be8dccdaad..d323c0974fe2 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.4.md b/shared/typos/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 0a97f8681fd9..353c40e472ed 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.3 +version: 1.0.4 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index b098bee611b1..6042620d77cb 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/util/change-notes/released/1.0.4.md b/shared/util/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/util/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/util/codeql/util/internal/MakeSets.qll b/shared/util/codeql/util/internal/MakeSets.qll deleted file mode 100644 index 2056a604399d..000000000000 --- a/shared/util/codeql/util/internal/MakeSets.qll +++ /dev/null @@ -1,104 +0,0 @@ -/** - * INTERNAL: This module may be replaced without notice. - * - * Provides a module to create first-class representations of sets of values. - */ - -/** The input signature for `MakeSets`. */ -signature module MkSetsInputSig { - class Key; - - class Value; - - Value getAValue(Key k); - - int totalorder(Value v); -} - -/** - * Given a binary predicate `getAValue`, this module groups the `Value` column - * by `Key` and constructs the corresponding sets of `Value`s as single entities. - * - * The output is a functional predicate, `getValueSet`, such that - * `getValueSet(k).contains(v)` is equivalent to `v = getAValue(k)`, and a - * class, `ValueSet`, that canonically represents a set of `Value`s. In - * particular, if two keys `k1` and `k2` relate to the same set of values, then - * `getValueSet(k1) = getValueSet(k2)`. - * - * If the given `totalorder` is not a total order, then the keys for which we - * cannot order the values cannot be given a canonical representation, and - * instead the key is simply reused as the set representation. This provides a - * reasonable fallback where `getValueSet(k).contains(v)` remains equivalent to - * `v = getAValue(k)`. - */ -module MakeSets { - private import Inp - - private int totalorderExt(Value v) { - result = 0 and v = getAValue(_) and not exists(totalorder(v)) - or - result = totalorder(v) - } - - private predicate rankedValue(Key k, Value v, int r) { - v = rank[r](Value v0 | v0 = getAValue(k) | v0 order by totalorderExt(v0)) - } - - private predicate unordered(Key k) { - strictcount(int r | rankedValue(k, _, r)) != strictcount(getAValue(k)) - } - - private int maxRank(Key k) { result = max(int r | rankedValue(k, _, r)) and not unordered(k) } - - private newtype TValList = - TValListNil() or - TValListCons(Value head, int r, TValList tail) { hasValListCons(_, head, r, tail) } or - TValListUnordered(Key k) { unordered(k) } - - private predicate hasValListCons(Key k, Value head, int r, TValList tail) { - rankedValue(k, head, r) and - hasValList(k, r - 1, tail) - } - - private predicate hasValList(Key k, int r, TValList l) { - exists(getAValue(k)) and r = 0 and l = TValListNil() - or - exists(Value head, TValList tail | - l = TValListCons(head, r, tail) and - hasValListCons(k, head, r, tail) - ) - } - - private predicate hasValueSet(Key k, TValList vs) { - hasValList(k, maxRank(k), vs) or vs = TValListUnordered(k) - } - - /** A set of `Value`s. */ - class ValueSet extends TValList { - ValueSet() { hasValueSet(_, this) } - - string toString() { - this instanceof TValListCons and result = "ValueSet" - or - this instanceof TValListUnordered and result = "ValueSetUnordered" - } - - private predicate sublist(TValListCons l) { - this = l or - this.sublist(TValListCons(_, _, l)) - } - - /** Holds if this set contains `v`. */ - predicate contains(Value v) { - this.sublist(TValListCons(v, _, _)) - or - exists(Key k | this = TValListUnordered(k) and v = getAValue(k)) - } - } - - /** - * Gets the set of values such that `getValueSet(k).contains(v)` is equivalent - * to `v = getAValue(k)`. - */ - ValueSet getValueSet(Key k) { hasValueSet(k, result) } -} diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ebdab64c5589..a4fcfad3f4b0 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 36b6e75f8033..1323436e6b2f 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.4.md b/shared/xml/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index ff110905f478..f23031247414 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.3 +version: 1.0.4 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 49b8a5aeb8c8..cd2c2e92ddfd 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.4.md b/shared/yaml/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index e426f850f7a8..6135b64ec830 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.3 +version: 1.0.4 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/README.md b/swift/README.md index 79621d0b9eff..a39c0ea55788 100644 --- a/swift/README.md +++ b/swift/README.md @@ -1,8 +1,5 @@ # Swift on CodeQL -> [!NOTE] -> CodeQL analysis for Swift is currently in beta. During the beta, analysis of Swift code, and the accompanying documentation, will not be as comprehensive as for other languages. - ## Development ### Building the Swift extractor diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 0630a303d73d..21e8b74bb023 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 1.1.0 + +### New Features + +* Swift support is now out of beta, and generally available. + +### Minor Analysis Improvements + +* Additional heuristics for sensitive private information have been added to the `SensitiveExprs.qll` library, improving coverage for credit card and social security numbers. This may result in additional results for queries that use sensitive data such as `swift/cleartext-transmission`. + ## 1.0.3 No user-facing changes. diff --git a/swift/ql/lib/change-notes/released/1.1.0.md b/swift/ql/lib/change-notes/released/1.1.0.md new file mode 100644 index 000000000000..fd8955658fc5 --- /dev/null +++ b/swift/ql/lib/change-notes/released/1.1.0.md @@ -0,0 +1,9 @@ +## 1.1.0 + +### New Features + +* Swift support is now out of beta, and generally available. + +### Minor Analysis Improvements + +* Additional heuristics for sensitive private information have been added to the `SensitiveExprs.qll` library, improving coverage for credit card and social security numbers. This may result in additional results for queries that use sensitive data such as `swift/cleartext-transmission`. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 06fa75b96cbc..2ac15439f561 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.1.0 diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll index de54324e005b..5abc652b3b44 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll @@ -1381,8 +1381,6 @@ class NodeRegion instanceof Unit { string toString() { result = "NodeRegion" } predicate contains(Node n) { none() } - - int totalOrder() { result = 1 } } /** diff --git a/swift/ql/lib/codeql/swift/security/SensitiveExprs.qll b/swift/ql/lib/codeql/swift/security/SensitiveExprs.qll index 0c712b4fbfdf..b1cdd64d245d 100644 --- a/swift/ql/lib/codeql/swift/security/SensitiveExprs.qll +++ b/swift/ql/lib/codeql/swift/security/SensitiveExprs.qll @@ -64,33 +64,10 @@ class SensitivePrivateInfo extends SensitiveDataType, TPrivateInfo { override string toString() { result = "private information" } override string getRegexp() { + // we've had good results for the e-mail heuristic in Swift, which isn't part of the default regex. Add it in. result = - "(?is).*(" + - // Inspired by the list on https://cwe.mitre.org/data/definitions/359.html - // Government identifiers, such as Social Security Numbers - "social.?security|employer.?identification|national.?insurance|resident.?id|" + - "passport.?(num|no)|" + - // Contact information, such as home addresses - "post.?code|zip.?code|home.?addr|" + - // and telephone numbers - "(mob(ile)?|home).?(num|no|tel|phone)|(tel|fax|phone).?(num|no)|telephone|" + - "emergency.?contact|" + - // Geographic location - where the user is (or was) - "l(atitude|ongitude)|nationality|" + - // Financial data - such as credit card numbers, salary, bank accounts, and debts - "(credit|debit|bank|visa).?(card|num|no|acc(ou?)nt)|acc(ou)?nt.?(no|num|credit)|" + - "salary|billing|credit.?(rating|score)|" + - // Communications - e-mail addresses, private e-mail messages, SMS text messages, chat logs, etc. - "e(mail|_mail)|" + - // Health - medical conditions, insurance status, prescription records - "birth.?da(te|y)|da(te|y).?(of.?)?birth|" + - "medical|(health|care).?plan|healthkit|appointment|prescription|" + - "blood.?(type|alcohol|glucose|pressure)|heart.?(rate|rhythm)|body.?(mass|fat)|" + - "menstrua|pregnan|insulin|inhaler|" + - // Relationships - work and family - "employ(er|ee)|spouse|maiden.?name" + - // --- - ").*" + HeuristicNames::maybeSensitiveRegexp(SensitiveDataClassification::private()) + .replaceAll(".*(", ".*(e(mail|_mail)|") } } diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index cfc198e7e7ee..cbb2fa19bf56 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 1.0.3 +version: 1.1.0 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index f08ae688531c..ca26ff94f225 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.4 + +No user-facing changes. + ## 1.0.3 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.0.4.md b/swift/ql/src/change-notes/released/1.0.4.md new file mode 100644 index 000000000000..d0255e750ff9 --- /dev/null +++ b/swift/ql/src/change-notes/released/1.0.4.md @@ -0,0 +1,3 @@ +## 1.0.4 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 06fa75b96cbc..03f7ea71b58e 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.3 +lastReleaseVersion: 1.0.4 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 9cc540a7dc90..bcd1861583a9 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.3 +version: 1.0.4 groups: - swift - queries diff --git a/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected b/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected index 051f846c5b1d..83fb7d9c1fe8 100644 --- a/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected +++ b/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected @@ -69,6 +69,7 @@ edges | SQLite.swift:197:17:197:49 | [...] [Collection element] | SQLite.swift:197:16:197:50 | [...] [Collection element, Collection element] | provenance | | | SQLite.swift:197:18:197:32 | ... <-(_:_:) ... | SQLite.swift:197:17:197:49 | [...] [Collection element] | provenance | | | SQLite.swift:197:32:197:32 | mobilePhoneNumber | SQLite.swift:197:18:197:32 | ... <-(_:_:) ... | provenance | | +| file://:0:0:0:0 | [post] self [data, Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | provenance | | | file://:0:0:0:0 | [post] self [data] | testRealm2.swift:13:6:13:6 | self [Return] [data] | provenance | | | file://:0:0:0:0 | [post] self [data] | testRealm.swift:27:6:27:6 | self [Return] [data] | provenance | | | file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | testCoreData2.swift:23:13:23:13 | self [Return] [notStoredBankAccountNumber] | provenance | | @@ -82,6 +83,7 @@ edges | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [password] | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [value] | provenance | | +| file://:0:0:0:0 | value [Collection element] | file://:0:0:0:0 | [post] self [data, Collection element] | provenance | | | sqlite3_c_api.swift:42:69:42:69 | medicalNotes | sqlite3_c_api.swift:46:27:46:27 | insertQuery | provenance | | | sqlite3_c_api.swift:43:49:43:49 | medicalNotes | sqlite3_c_api.swift:47:27:47:27 | updateQuery | provenance | | | testCoreData2.swift:23:13:23:13 | value | file://:0:0:0:0 | value | provenance | | @@ -294,9 +296,38 @@ edges | testGRDB.swift:212:98:212:107 | [...] [Collection element] | testGRDB.swift:212:98:212:107 | [...] | provenance | | | testGRDB.swift:212:99:212:99 | password | testGRDB.swift:212:98:212:107 | [...] [Collection element] | provenance | | | testRealm2.swift:13:6:13:6 | value | file://:0:0:0:0 | value | provenance | | +| testRealm2.swift:13:6:13:6 | value [Collection element] | file://:0:0:0:0 | value [Collection element] | provenance | | | testRealm2.swift:18:2:18:2 | [post] o [data] | testRealm2.swift:18:2:18:2 | [post] o | provenance | | | testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:13:6:13:6 | value | provenance | | | testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:18:2:18:2 | [post] o [data] | provenance | | +| testRealm2.swift:24:2:24:2 | [post] o [data] | testRealm2.swift:24:2:24:2 | [post] o | provenance | | +| testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:13:6:13:6 | value | provenance | | +| testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:24:2:24:2 | [post] o [data] | provenance | | +| testRealm2.swift:25:2:25:2 | [post] o [data] | testRealm2.swift:25:2:25:2 | [post] o | provenance | | +| testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:13:6:13:6 | value | provenance | | +| testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:25:2:25:2 | [post] o [data] | provenance | | +| testRealm2.swift:26:2:26:2 | [post] o [data, Collection element] | testRealm2.swift:26:2:26:2 | [post] o | provenance | | +| testRealm2.swift:26:2:26:2 | [post] o [data] | testRealm2.swift:26:2:26:2 | [post] o | provenance | | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | provenance | | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) | testRealm2.swift:26:2:26:2 | [post] o [data] | provenance | | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | provenance | | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | testRealm2.swift:26:2:26:2 | [post] o [data, Collection element] | provenance | | +| testRealm2.swift:26:18:26:18 | ssn_int | testRealm2.swift:26:11:26:25 | call to String.init(_:) | provenance | | +| testRealm2.swift:26:18:26:18 | ssn_int | testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | provenance | | +| testRealm2.swift:32:2:32:2 | [post] o [data] | testRealm2.swift:32:2:32:2 | [post] o | provenance | | +| testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:13:6:13:6 | value | provenance | | +| testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:32:2:32:2 | [post] o [data] | provenance | | +| testRealm2.swift:33:2:33:2 | [post] o [data] | testRealm2.swift:33:2:33:2 | [post] o | provenance | | +| testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:13:6:13:6 | value | provenance | | +| testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:33:2:33:2 | [post] o [data] | provenance | | +| testRealm2.swift:34:2:34:2 | [post] o [data, Collection element] | testRealm2.swift:34:2:34:2 | [post] o | provenance | | +| testRealm2.swift:34:2:34:2 | [post] o [data] | testRealm2.swift:34:2:34:2 | [post] o | provenance | | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | provenance | | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) | testRealm2.swift:34:2:34:2 | [post] o [data] | provenance | | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | provenance | | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | testRealm2.swift:34:2:34:2 | [post] o [data, Collection element] | provenance | | +| testRealm2.swift:34:18:34:18 | int_ccn | testRealm2.swift:34:11:34:25 | call to String.init(_:) | provenance | | +| testRealm2.swift:34:18:34:18 | int_ccn | testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | provenance | | | testRealm.swift:27:6:27:6 | value | file://:0:0:0:0 | value | provenance | | | testRealm.swift:34:6:34:6 | value | file://:0:0:0:0 | value | provenance | | | testRealm.swift:41:2:41:2 | [post] a [data] | testRealm.swift:41:2:41:2 | [post] a | provenance | | @@ -413,6 +444,7 @@ nodes | file://:0:0:0:0 | .value | semmle.label | .value | | file://:0:0:0:0 | .value | semmle.label | .value | | file://:0:0:0:0 | .value2 | semmle.label | .value2 | +| file://:0:0:0:0 | [post] self [data, Collection element] | semmle.label | [post] self [data, Collection element] | | file://:0:0:0:0 | [post] self [data] | semmle.label | [post] self [data] | | file://:0:0:0:0 | [post] self [data] | semmle.label | [post] self [data] | | file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | semmle.label | [post] self [notStoredBankAccountNumber] | @@ -426,6 +458,7 @@ nodes | file://:0:0:0:0 | value | semmle.label | value | | file://:0:0:0:0 | value | semmle.label | value | | file://:0:0:0:0 | value | semmle.label | value | +| file://:0:0:0:0 | value [Collection element] | semmle.label | value [Collection element] | | sqlite3_c_api.swift:42:69:42:69 | medicalNotes | semmle.label | medicalNotes | | sqlite3_c_api.swift:43:49:43:49 | medicalNotes | semmle.label | medicalNotes | | sqlite3_c_api.swift:46:27:46:27 | insertQuery | semmle.label | insertQuery | @@ -716,11 +749,37 @@ nodes | testGRDB.swift:212:98:212:107 | [...] | semmle.label | [...] | | testGRDB.swift:212:98:212:107 | [...] [Collection element] | semmle.label | [...] [Collection element] | | testGRDB.swift:212:99:212:99 | password | semmle.label | password | +| testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | semmle.label | self [Return] [data, Collection element] | | testRealm2.swift:13:6:13:6 | self [Return] [data] | semmle.label | self [Return] [data] | | testRealm2.swift:13:6:13:6 | value | semmle.label | value | +| testRealm2.swift:13:6:13:6 | value [Collection element] | semmle.label | value [Collection element] | | testRealm2.swift:18:2:18:2 | [post] o | semmle.label | [post] o | | testRealm2.swift:18:2:18:2 | [post] o [data] | semmle.label | [post] o [data] | | testRealm2.swift:18:11:18:11 | myPassword | semmle.label | myPassword | +| testRealm2.swift:24:2:24:2 | [post] o | semmle.label | [post] o | +| testRealm2.swift:24:2:24:2 | [post] o [data] | semmle.label | [post] o [data] | +| testRealm2.swift:24:11:24:11 | socialSecurityNumber | semmle.label | socialSecurityNumber | +| testRealm2.swift:25:2:25:2 | [post] o | semmle.label | [post] o | +| testRealm2.swift:25:2:25:2 | [post] o [data] | semmle.label | [post] o [data] | +| testRealm2.swift:25:11:25:11 | ssn | semmle.label | ssn | +| testRealm2.swift:26:2:26:2 | [post] o | semmle.label | [post] o | +| testRealm2.swift:26:2:26:2 | [post] o [data, Collection element] | semmle.label | [post] o [data, Collection element] | +| testRealm2.swift:26:2:26:2 | [post] o [data] | semmle.label | [post] o [data] | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) | semmle.label | call to String.init(_:) | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | semmle.label | call to String.init(_:) [Collection element] | +| testRealm2.swift:26:18:26:18 | ssn_int | semmle.label | ssn_int | +| testRealm2.swift:32:2:32:2 | [post] o | semmle.label | [post] o | +| testRealm2.swift:32:2:32:2 | [post] o [data] | semmle.label | [post] o [data] | +| testRealm2.swift:32:11:32:11 | creditCardNumber | semmle.label | creditCardNumber | +| testRealm2.swift:33:2:33:2 | [post] o | semmle.label | [post] o | +| testRealm2.swift:33:2:33:2 | [post] o [data] | semmle.label | [post] o [data] | +| testRealm2.swift:33:11:33:11 | CCN | semmle.label | CCN | +| testRealm2.swift:34:2:34:2 | [post] o | semmle.label | [post] o | +| testRealm2.swift:34:2:34:2 | [post] o [data, Collection element] | semmle.label | [post] o [data, Collection element] | +| testRealm2.swift:34:2:34:2 | [post] o [data] | semmle.label | [post] o [data] | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) | semmle.label | call to String.init(_:) | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | semmle.label | call to String.init(_:) [Collection element] | +| testRealm2.swift:34:18:34:18 | int_ccn | semmle.label | int_ccn | | testRealm.swift:27:6:27:6 | self [Return] [data] | semmle.label | self [Return] [data] | | testRealm.swift:27:6:27:6 | value | semmle.label | value | | testRealm.swift:34:6:34:6 | self [Return] [password] | semmle.label | self [Return] [password] | @@ -756,6 +815,14 @@ subpaths | testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:70:9:70:9 | self | file://:0:0:0:0 | .value | testCoreData2.swift:104:18:104:20 | .value | | testCoreData2.swift:105:18:105:18 | e | testCoreData2.swift:71:9:71:9 | self | file://:0:0:0:0 | .value2 | testCoreData2.swift:105:18:105:20 | .value2 | | testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:18:2:18:2 | [post] o [data] | +| testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:24:2:24:2 | [post] o [data] | +| testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:25:2:25:2 | [post] o [data] | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:26:2:26:2 | [post] o [data] | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | testRealm2.swift:26:2:26:2 | [post] o [data, Collection element] | +| testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:32:2:32:2 | [post] o [data] | +| testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:33:2:33:2 | [post] o [data] | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:34:2:34:2 | [post] o [data] | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | testRealm2.swift:34:2:34:2 | [post] o [data, Collection element] | | testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:41:2:41:2 | [post] a [data] | | testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:49:2:49:2 | [post] c [data] | | testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:59:2:59:3 | [post] ...! [data] | @@ -890,6 +957,12 @@ subpaths | testGRDB.swift:210:84:210:93 | [...] | testGRDB.swift:210:85:210:85 | password | testGRDB.swift:210:84:210:93 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | testGRDB.swift:210:85:210:85 | password | password | | testGRDB.swift:212:98:212:107 | [...] | testGRDB.swift:212:99:212:99 | password | testGRDB.swift:212:98:212:107 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | testGRDB.swift:212:99:212:99 | password | password | | testRealm2.swift:18:2:18:2 | o | testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:18:2:18:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:18:11:18:11 | myPassword | myPassword | +| testRealm2.swift:24:2:24:2 | o | testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:24:2:24:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:24:11:24:11 | socialSecurityNumber | socialSecurityNumber | +| testRealm2.swift:25:2:25:2 | o | testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:25:2:25:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:25:11:25:11 | ssn | ssn | +| testRealm2.swift:26:2:26:2 | o | testRealm2.swift:26:18:26:18 | ssn_int | testRealm2.swift:26:2:26:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:26:18:26:18 | ssn_int | ssn_int | +| testRealm2.swift:32:2:32:2 | o | testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:32:2:32:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:32:11:32:11 | creditCardNumber | creditCardNumber | +| testRealm2.swift:33:2:33:2 | o | testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:33:2:33:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:33:11:33:11 | CCN | CCN | +| testRealm2.swift:34:2:34:2 | o | testRealm2.swift:34:18:34:18 | int_ccn | testRealm2.swift:34:2:34:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:34:18:34:18 | int_ccn | int_ccn | | testRealm.swift:41:2:41:2 | a | testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:41:2:41:2 | [post] a | This operation stores 'a' in a database. It may contain unencrypted sensitive data from $@. | testRealm.swift:41:11:41:11 | myPassword | myPassword | | testRealm.swift:49:2:49:2 | c | testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:49:2:49:2 | [post] c | This operation stores 'c' in a database. It may contain unencrypted sensitive data from $@. | testRealm.swift:49:11:49:11 | myPassword | myPassword | | testRealm.swift:59:2:59:3 | ...! | testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:59:2:59:3 | [post] ...! | This operation stores '...!' in a database. It may contain unencrypted sensitive data from $@. | testRealm.swift:59:12:59:12 | myPassword | myPassword | diff --git a/swift/ql/test/query-tests/Security/CWE-311/SensitiveExprs.expected b/swift/ql/test/query-tests/Security/CWE-311/SensitiveExprs.expected index 57e4267d9e43..353d6d0a6315 100644 --- a/swift/ql/test/query-tests/Security/CWE-311/SensitiveExprs.expected +++ b/swift/ql/test/query-tests/Security/CWE-311/SensitiveExprs.expected @@ -141,6 +141,12 @@ | testGRDB.swift:210:85:210:85 | password | label:password, type:password | | testGRDB.swift:212:99:212:99 | password | label:password, type:password | | testRealm2.swift:18:11:18:11 | myPassword | label:myPassword, type:password | +| testRealm2.swift:24:11:24:11 | socialSecurityNumber | label:socialSecurityNumber, type:private information | +| testRealm2.swift:25:11:25:11 | ssn | label:ssn, type:private information | +| testRealm2.swift:26:18:26:18 | ssn_int | label:ssn_int, type:private information | +| testRealm2.swift:32:11:32:11 | creditCardNumber | label:creditCardNumber, type:private information | +| testRealm2.swift:33:11:33:11 | CCN | label:CCN, type:private information | +| testRealm2.swift:34:18:34:18 | int_ccn | label:int_ccn, type:private information | | testRealm.swift:31:20:31:20 | .password | label:password, type:password | | testRealm.swift:41:11:41:11 | myPassword | label:myPassword, type:password | | testRealm.swift:49:11:49:11 | myPassword | label:myPassword, type:password | diff --git a/swift/ql/test/query-tests/Security/CWE-311/testRealm2.swift b/swift/ql/test/query-tests/Security/CWE-311/testRealm2.swift index 2c1850ee6209..f9a325c42bbd 100644 --- a/swift/ql/test/query-tests/Security/CWE-311/testRealm2.swift +++ b/swift/ql/test/query-tests/Security/CWE-311/testRealm2.swift @@ -13,9 +13,25 @@ class MyRealmSwiftObject3 : Object { var data: String } -func test1(o: MyRealmSwiftObject3, myHarmless: String, myPassword : String) { +func test1(o: MyRealmSwiftObject3, myHarmless: String, myPassword: String) { // ... o.data = myPassword // BAD o.data = myHarmless // ... } + +func test2(o: MyRealmSwiftObject3, ccn: String, socialSecurityNumber: String, ssn: String, ssn_int: Int, userSSN: String, classno: String) { + o.data = socialSecurityNumber // BAD + o.data = ssn // BAD + o.data = String(ssn_int) // BAD + o.data = userSSN // BAD [NOT DETECTED] + o.data = classno // GOOD +} + +func test3(o: MyRealmSwiftObject3, ccn: String, creditCardNumber: String, CCN: String, int_ccn: Int, userCcn: String, succnode: String) { + o.data = creditCardNumber // BAD + o.data = CCN // BAD + o.data = String(int_ccn) // BAD + o.data = userCcn // BAD [NOT DETECTED] + o.data = succnode // GOOD +}