From bfc05539ec28eee2c6bfa52682f28528a73bffcd Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 30 Oct 2020 13:35:03 +0100 Subject: [PATCH] Update library and dbscheme --- ql/src/codeql_ruby/ast.qll | 26 +++++++++++++++++++++++--- ql/src/ruby.dbscheme | 22 +++++++++++++++++++++- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/ql/src/codeql_ruby/ast.qll b/ql/src/codeql_ruby/ast.qll index 69c5e5dd4b4..69e7e566c20 100644 --- a/ql/src/codeql_ruby/ast.qll +++ b/ql/src/codeql_ruby/ast.qll @@ -513,6 +513,18 @@ class HashSplatParameter extends @hash_splat_parameter, Top, BlockParametersChil override Top getAFieldOrChild() { hash_splat_parameter_name(this, result) } } +class HeredocBodyChildType extends @heredoc_body_child_type, Top { } + +class HeredocBody extends @heredoc_body, Top { + override string toString() { result = "HeredocBody" } + + override Location getLocation() { heredoc_body_def(this, result) } + + HeredocBodyChildType getChild(int i) { heredoc_body_child(this, i, result) } + + override Top getAFieldOrChild() { heredoc_body_child(this, _, result) } +} + class IfAlternativeType extends @if_alternative_type, Top { } class If extends @if, Top, UnderscorePrimary { @@ -558,7 +570,7 @@ class In extends @in, Top { } class Interpolation extends @interpolation, Top, BareStringChildType, BareSymbolChildType, - RegexChildType, StringChildType, SubshellChildType, SymbolChildType { + HeredocBodyChildType, RegexChildType, StringChildType, SubshellChildType, SymbolChildType { override string toString() { result = "Interpolation" } override Location getLocation() { interpolation_def(this, _, result) } @@ -1795,6 +1807,14 @@ class ClassVariable extends @class_variable, Top, UnderscoreMethodName, Undersco string getText() { class_variable_def(this, result, _) } } +class Comment extends @comment, Top { + override string toString() { result = "Comment" } + + override Location getLocation() { comment_def(this, _, result) } + + string getText() { comment_def(this, result, _) } +} + class Complex extends @complex, Top, UnderscorePrimary { override string toString() { result = "Complex" } @@ -1869,7 +1889,7 @@ class EnsureUnnamed extends @ensure_unnamed, Top { } class EscapeSequence extends @escape_sequence, Top, BareStringChildType, BareSymbolChildType, - RegexChildType, StringChildType, SubshellChildType, SymbolChildType { + HeredocBodyChildType, RegexChildType, StringChildType, SubshellChildType, SymbolChildType { override string toString() { result = "EscapeSequence" } override Location getLocation() { escape_sequence_def(this, _, result) } @@ -1917,7 +1937,7 @@ class HeredocBeginning extends @heredoc_beginning, Top, UnderscorePrimary { string getText() { heredoc_beginning_def(this, result, _) } } -class HeredocEnd extends @heredoc_end, Top { +class HeredocEnd extends @heredoc_end, Top, HeredocBodyChildType { override string toString() { result = "HeredocEnd" } override Location getLocation() { heredoc_end_def(this, _, result) } diff --git a/ql/src/ruby.dbscheme b/ql/src/ruby.dbscheme index 3456e12d155..64fde42a85b 100644 --- a/ql/src/ruby.dbscheme +++ b/ql/src/ruby.dbscheme @@ -499,6 +499,20 @@ hash_splat_parameter_def( int loc: @location ref ); +@heredoc_body_child_type = @escape_sequence | @heredoc_end | @interpolation + +#keyset[heredoc_body, index] +heredoc_body_child( + int heredoc_body: @heredoc_body ref, + int index: int ref, + unique int heredoc_body_child_type: @heredoc_body_child_type ref +); + +heredoc_body_def( + unique int id: @heredoc_body, + int loc: @location ref +); + @if_alternative_type = @else | @elsif if_alternative( @@ -1542,6 +1556,12 @@ class_variable_def( int loc: @location ref ); +comment_def( + unique int id: @comment, + string text: string ref, + int loc: @location ref +); + complex_def( unique int id: @complex, string text: string ref, @@ -1836,5 +1856,5 @@ tilde_unnamed_def( int loc: @location ref ); -@top = @alias | @argument_list | @array | @assignment | @bare_string | @bare_symbol | @begin | @begin_block | @binary | @block | @block_argument | @block_parameter | @block_parameters | @break | @call | @case__ | @chained_string | @class | @conditional | @destructured_left_assignment | @destructured_parameter | @do | @do_block | @element_reference | @else | @elsif | @empty_statement | @end_block | @ensure | @exception_variable | @exceptions | @for | @hash | @hash_splat_argument | @hash_splat_parameter | @if | @if_modifier | @in | @interpolation | @keyword_parameter | @lambda | @lambda_parameters | @left_assignment_list | @method | @method_call | @method_parameters | @module | @next | @operator | @operator_assignment | @optional_parameter | @pair | @parenthesized_statements | @pattern | @program | @range | @rational | @redo | @regex | @rescue | @rescue_modifier | @rest_assignment | @retry | @return | @right_assignment_list | @scope_resolution | @setter | @singleton_class | @singleton_method | @splat_argument | @splat_parameter | @string__ | @string_array | @subshell | @superclass | @symbol | @symbol_array | @then | @unary | @undef | @unless | @unless_modifier | @until | @until_modifier | @when | @while | @while_modifier | @yield | @bang_unnamed | @bangequal_unnamed | @bangtilde_unnamed | @dquote_unnamed | @hashlbrace_unnamed | @percent_unnamed | @percentequal_unnamed | @percentilparen_unnamed | @percentwlparen_unnamed | @ampersand_unnamed | @ampersandampersand_unnamed | @ampersandampersandequal_unnamed | @ampersanddot_unnamed | @ampersandequal_unnamed | @lparen_unnamed | @rparen_unnamed | @star_unnamed | @starstar_unnamed | @starstarequal_unnamed | @starequal_unnamed | @plus_unnamed | @plusequal_unnamed | @plusat_unnamed | @comma_unnamed | @minus_unnamed | @minusequal_unnamed | @minusrangle_unnamed | @minusat_unnamed | @dot_unnamed | @dotdot_unnamed | @dotdotdot_unnamed | @slash_unnamed | @slashequal_unnamed | @colon_unnamed | @colondquote_unnamed | @coloncolon_unnamed | @semicolon_unnamed | @langle_unnamed | @langlelangle_unnamed | @langlelangleequal_unnamed | @langleequal_unnamed | @langleequalrangle_unnamed | @equal_unnamed | @equalequal_unnamed | @equalequalequal_unnamed | @equalrangle_unnamed | @equaltilde_unnamed | @rangle_unnamed | @rangleequal_unnamed | @ranglerangle_unnamed | @ranglerangleequal_unnamed | @question_unnamed | @b_e_g_i_n__unnamed | @e_n_d__unnamed | @lbracket_unnamed | @lbracketrbracket_unnamed | @lbracketrbracketequal_unnamed | @rbracket_unnamed | @caret_unnamed | @caretequal_unnamed | @underscore__e_n_d____unnamed | @backtick_unnamed | @alias_unnamed | @and_unnamed | @begin_unnamed | @break_unnamed | @case_unnamed | @character | @class_unnamed | @class_variable | @complex | @constant | @def_unnamed | @definedquestion_unnamed | @do_unnamed | @else_unnamed | @elsif_unnamed | @end_unnamed | @ensure_unnamed | @escape_sequence | @false | @float__ | @for_unnamed | @global_variable | @heredoc_beginning | @heredoc_end | @identifier | @if_unnamed | @in_unnamed | @instance_variable | @integer | @module_unnamed | @next_unnamed | @nil | @not_unnamed | @or_unnamed | @r_unnamed | @redo_unnamed | @rescue_unnamed | @retry_unnamed | @return_unnamed | @self | @super | @then_unnamed | @true | @undef_unnamed | @uninterpreted | @unless_unnamed | @until_unnamed | @when_unnamed | @while_unnamed | @yield_unnamed | @lbrace_unnamed | @pipe_unnamed | @pipeequal_unnamed | @pipepipe_unnamed | @pipepipeequal_unnamed | @rbrace_unnamed | @tilde_unnamed +@top = @alias | @argument_list | @array | @assignment | @bare_string | @bare_symbol | @begin | @begin_block | @binary | @block | @block_argument | @block_parameter | @block_parameters | @break | @call | @case__ | @chained_string | @class | @conditional | @destructured_left_assignment | @destructured_parameter | @do | @do_block | @element_reference | @else | @elsif | @empty_statement | @end_block | @ensure | @exception_variable | @exceptions | @for | @hash | @hash_splat_argument | @hash_splat_parameter | @heredoc_body | @if | @if_modifier | @in | @interpolation | @keyword_parameter | @lambda | @lambda_parameters | @left_assignment_list | @method | @method_call | @method_parameters | @module | @next | @operator | @operator_assignment | @optional_parameter | @pair | @parenthesized_statements | @pattern | @program | @range | @rational | @redo | @regex | @rescue | @rescue_modifier | @rest_assignment | @retry | @return | @right_assignment_list | @scope_resolution | @setter | @singleton_class | @singleton_method | @splat_argument | @splat_parameter | @string__ | @string_array | @subshell | @superclass | @symbol | @symbol_array | @then | @unary | @undef | @unless | @unless_modifier | @until | @until_modifier | @when | @while | @while_modifier | @yield | @bang_unnamed | @bangequal_unnamed | @bangtilde_unnamed | @dquote_unnamed | @hashlbrace_unnamed | @percent_unnamed | @percentequal_unnamed | @percentilparen_unnamed | @percentwlparen_unnamed | @ampersand_unnamed | @ampersandampersand_unnamed | @ampersandampersandequal_unnamed | @ampersanddot_unnamed | @ampersandequal_unnamed | @lparen_unnamed | @rparen_unnamed | @star_unnamed | @starstar_unnamed | @starstarequal_unnamed | @starequal_unnamed | @plus_unnamed | @plusequal_unnamed | @plusat_unnamed | @comma_unnamed | @minus_unnamed | @minusequal_unnamed | @minusrangle_unnamed | @minusat_unnamed | @dot_unnamed | @dotdot_unnamed | @dotdotdot_unnamed | @slash_unnamed | @slashequal_unnamed | @colon_unnamed | @colondquote_unnamed | @coloncolon_unnamed | @semicolon_unnamed | @langle_unnamed | @langlelangle_unnamed | @langlelangleequal_unnamed | @langleequal_unnamed | @langleequalrangle_unnamed | @equal_unnamed | @equalequal_unnamed | @equalequalequal_unnamed | @equalrangle_unnamed | @equaltilde_unnamed | @rangle_unnamed | @rangleequal_unnamed | @ranglerangle_unnamed | @ranglerangleequal_unnamed | @question_unnamed | @b_e_g_i_n__unnamed | @e_n_d__unnamed | @lbracket_unnamed | @lbracketrbracket_unnamed | @lbracketrbracketequal_unnamed | @rbracket_unnamed | @caret_unnamed | @caretequal_unnamed | @underscore__e_n_d____unnamed | @backtick_unnamed | @alias_unnamed | @and_unnamed | @begin_unnamed | @break_unnamed | @case_unnamed | @character | @class_unnamed | @class_variable | @comment | @complex | @constant | @def_unnamed | @definedquestion_unnamed | @do_unnamed | @else_unnamed | @elsif_unnamed | @end_unnamed | @ensure_unnamed | @escape_sequence | @false | @float__ | @for_unnamed | @global_variable | @heredoc_beginning | @heredoc_end | @identifier | @if_unnamed | @in_unnamed | @instance_variable | @integer | @module_unnamed | @next_unnamed | @nil | @not_unnamed | @or_unnamed | @r_unnamed | @redo_unnamed | @rescue_unnamed | @retry_unnamed | @return_unnamed | @self | @super | @then_unnamed | @true | @undef_unnamed | @uninterpreted | @unless_unnamed | @until_unnamed | @when_unnamed | @while_unnamed | @yield_unnamed | @lbrace_unnamed | @pipe_unnamed | @pipeequal_unnamed | @pipepipe_unnamed | @pipepipeequal_unnamed | @rbrace_unnamed | @tilde_unnamed