nasl 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/.travis.yml +6 -1
- data/Gemfile +1 -4
- data/README.md +26 -0
- data/lib/nasl/grammar.racc +149 -10
- data/lib/nasl/parser/block.rb +7 -1
- data/lib/nasl/parser/case.rb +55 -0
- data/lib/nasl/parser/function.rb +28 -3
- data/lib/nasl/parser/namespace.rb +50 -0
- data/lib/nasl/parser/node.rb +11 -2
- data/lib/nasl/parser/obj_var.rb +41 -0
- data/lib/nasl/parser/object.rb +50 -0
- data/lib/nasl/parser/switch.rb +51 -0
- data/lib/nasl/token.rb +1 -1
- data/lib/nasl/tokenizer.rb +51 -14
- data/lib/nasl/version.rb +1 -1
- data/nasl.gemspec +4 -3
- data/test/unit/parser/test_namespace.rb +45 -0
- data/test/unit/parser/test_object.rb +75 -0
- data/test/unit/parser/test_switch.rb +96 -0
- data/test/unit/tokenizer/test_comment.rb +76 -1
- data/test/unit/tokenizer/test_operator_lookahead.rb +75 -0
- metadata +46 -20
- data/Gemfile.ci +0 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
             | 
| 5 | 
            -
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                MGZmMWYyMmVkOTA3ZjhlZTUwNGY4YWI3OGJmYzA0YzlmNThlMjg0NQ==
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 199cd9a0ada92765a2e1812786f7b41eb22c3724
         | 
| 4 | 
            +
              data.tar.gz: 0b8ff7ebf8d1b4b166dd7ffb4f71fa52d884e1aa
         | 
| 7 5 | 
             
            SHA512:
         | 
| 8 | 
            -
              metadata.gz:  | 
| 9 | 
            -
             | 
| 10 | 
            -
                ODBhNTc1NjIxYzhkNmJjZTVmMDJkMGMzMDg5YzViYzBiMjZkZTA1ZmFjM2Q1
         | 
| 11 | 
            -
                ZjRhMDFkZDg0ZDFkY2MwYTYwOGM3YWU3MzFiZjMxMmU1NWVhMWM=
         | 
| 12 | 
            -
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                MWRhZDY3MjQ4NDg5ZjQ5ZTExOTk3MjIyODJlN2IzNGZhNTliOTAwODA1ZmM4
         | 
| 14 | 
            -
                MWM5OWRkNzdmNzgyZDM3Y2JkOTMyNGY0ZTI1YzdlMWUxMTgzMWZmNjAxNzJj
         | 
| 15 | 
            -
                NWE2ZDNjZDQzMTI0MWE4M2M5ODY1YzQ2MDhhOTM3M2MyYzIwZjQ=
         | 
| 6 | 
            +
              metadata.gz: 1cd9093af658c23660d9d662e3da33ab2ecaf97aececd1402832a92a7d779e245c2a64c7cfe1be8d71793f2f08b2f51388e03de1d2a5be0da7712bc541a6a8ab
         | 
| 7 | 
            +
              data.tar.gz: 749a6d9e4fea7edb88eb34113496988d7cba0cfe6baffb00eeabc154a4f81ffddd2d93eccbff44b142f645d2f190f7c88559bf77d892cd9bacd5f2ac42d9801e
         | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -1,17 +1,22 @@ | |
| 1 1 | 
             
            language: ruby
         | 
| 2 | 
            +
            sudo: false
         | 
| 2 3 |  | 
| 3 4 | 
             
            rvm: 
         | 
| 4 5 | 
             
              - 1.9.3
         | 
| 5 6 | 
             
              - 2.0.0
         | 
| 6 7 | 
             
              - 2.1.0
         | 
| 8 | 
            +
              - 2.2.0
         | 
| 9 | 
            +
              - 2.3.0
         | 
| 7 10 |  | 
| 8 11 | 
             
            gemfile:
         | 
| 9 | 
            -
              - Gemfile | 
| 12 | 
            +
              - Gemfile
         | 
| 10 13 |  | 
| 11 14 | 
             
            notifications:
         | 
| 12 15 | 
             
              email:
         | 
| 13 16 | 
             
                - jhammack@tenable.com
         | 
| 14 17 | 
             
                - aweber@tenable.com
         | 
| 18 | 
            +
                - mcoumbes@tenable.com
         | 
| 19 | 
            +
                - aorr@tenable.com
         | 
| 15 20 |  | 
| 16 21 | 
             
            before_install:
         | 
| 17 22 | 
             
              - gem --version
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,5 +1,8 @@ | |
| 1 1 | 
             
            # Installation
         | 
| 2 2 |  | 
| 3 | 
            +
            [](https://rubygems.org/gems/nasl)
         | 
| 4 | 
            +
            [](https://travis-ci.org/tenable/nasl)
         | 
| 5 | 
            +
             | 
| 3 6 | 
             
            ## Git
         | 
| 4 7 |  | 
| 5 8 | 
             
            Installing the source from Git is done as follows:
         | 
| @@ -98,5 +101,28 @@ obviously, and can be used as follows: | |
| 98 101 | 
             
            That's all there is to it. If there are any errors, it'll throw an instance of
         | 
| 99 102 | 
             
            `ParseException` that will include as much context about the error as possible.
         | 
| 100 103 |  | 
| 104 | 
            +
            Development
         | 
| 105 | 
            +
            -----------
         | 
| 106 | 
            +
             | 
| 107 | 
            +
            This project uses [Bundler](http://bundler.io/).
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            If you have a brand-new Debian machine, do this as root:
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                apt-get install ruby-dev rubygems git
         | 
| 112 | 
            +
                gem install bundler
         | 
| 113 | 
            +
             | 
| 114 | 
            +
            As your regular user:
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                git clone https://github.com/tenable/nasl
         | 
| 117 | 
            +
                cd nasl
         | 
| 118 | 
            +
                bundle install --path vendor/bundle
         | 
| 119 | 
            +
                bundle exec rake grammars
         | 
| 120 | 
            +
                bundle exec rake test
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            All the tests should pass!
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            To run the nasl-parse command line, do `bundle exec ./bin/nasl-parse`, which should give
         | 
| 125 | 
            +
            a help message.
         | 
| 126 | 
            +
             | 
| 101 127 | 
             
            [nasldoc]: https://github.com/tenable/nasldoc
         | 
| 102 128 | 
             
            [pedant]: https://github.com/tenable/pedant
         | 
    
        data/lib/nasl/grammar.racc
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            ################################################################################
         | 
| 2 | 
            -
            # Copyright (c) 2011- | 
| 2 | 
            +
            # Copyright (c) 2011-2018, Tenable Network Security
         | 
| 3 3 | 
             
            # All rights reserved.
         | 
| 4 4 | 
             
            #
         | 
| 5 5 | 
             
            # Redistribution and use in source and binary forms, with or without
         | 
| @@ -74,18 +74,40 @@ rule | |
| 74 74 | 
             
                         { c(*val) }
         | 
| 75 75 | 
             
                         | export
         | 
| 76 76 | 
             
                         { val[0] }
         | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 77 | 
            +
                       #  | COMMENT function
         | 
| 78 | 
            +
                       #  { c(*val) }
         | 
| 79 | 
            +
                       #  | function
         | 
| 80 | 
            +
                       #  { val[0] }
         | 
| 81 81 | 
             
                         | statement
         | 
| 82 82 | 
             
                         { val[0] }
         | 
| 83 | 
            +
                         | obj_decl
         | 
| 84 | 
            +
                         { val[0] }
         | 
| 85 | 
            +
                         | namespace
         | 
| 86 | 
            +
                         { val[0] }
         | 
| 83 87 | 
             
                         ;
         | 
| 84 88 |  | 
| 89 | 
            +
              obj_statement : obj_var SEMICOLON
         | 
| 90 | 
            +
                            { val[0] }
         | 
| 91 | 
            +
                            | COMMENT obj_function
         | 
| 92 | 
            +
                            { c(*val) }
         | 
| 93 | 
            +
                            | obj_function
         | 
| 94 | 
            +
                            { val[0] }
         | 
| 95 | 
            +
                            ;
         | 
| 96 | 
            +
                          #  | obj_function
         | 
| 97 | 
            +
                          #  { val[0] }
         | 
| 98 | 
            +
             | 
| 85 99 | 
             
              statement : simple
         | 
| 86 100 | 
             
                         { val[0] }
         | 
| 87 101 | 
             
                         | compound
         | 
| 88 102 | 
             
                         { val[0] }
         | 
| 103 | 
            +
                         | function 
         | 
| 104 | 
            +
                         { val[0] }
         | 
| 105 | 
            +
                         | COMMENT function 
         | 
| 106 | 
            +
                         { c(*val) }
         | 
| 107 | 
            +
                         | obj_decl
         | 
| 108 | 
            +
                         { val[0] }
         | 
| 109 | 
            +
                         | namespace 
         | 
| 110 | 
            +
                         { val[0] }
         | 
| 89 111 | 
             
                         ;
         | 
| 90 112 |  | 
| 91 113 | 
             
              ##############################################################################
         | 
| @@ -96,10 +118,16 @@ rule | |
| 96 118 | 
             
                         { n(:Export, *val) }
         | 
| 97 119 | 
             
                         ;
         | 
| 98 120 |  | 
| 121 | 
            +
              obj_function : obj_func_attr FUNCTION ident LPAREN params RPAREN block
         | 
| 122 | 
            +
                           { n(:Function, val[0], 'obj', val[1], val[2], val[3], val[4], val[5], val[6]) }
         | 
| 123 | 
            +
                           | obj_func_attr FUNCTION ident LPAREN RPAREN block
         | 
| 124 | 
            +
                           { n(:Function, val[0], 'obj', val[1], val[2], val[3], val[4], val[5]) }
         | 
| 125 | 
            +
                           ;
         | 
| 126 | 
            +
             | 
| 99 127 | 
             
              function   : FUNCTION ident LPAREN params RPAREN block
         | 
| 100 | 
            -
                         { n(:Function,  | 
| 128 | 
            +
                         { n(:Function, val[0], 'normal', val[1], val[2], val[3], val[4], val[5]) }
         | 
| 101 129 | 
             
                         | FUNCTION ident LPAREN RPAREN block
         | 
| 102 | 
            -
                         { n(:Function,  | 
| 130 | 
            +
                         { n(:Function, val[0], 'normal', val[1], val[2], val[3], val[4]) }
         | 
| 103 131 | 
             
                         ;
         | 
| 104 132 |  | 
| 105 133 | 
             
              simple     : assign
         | 
| @@ -118,6 +146,8 @@ rule | |
| 118 146 | 
             
                         { c(*val) }
         | 
| 119 147 | 
             
                         | global
         | 
| 120 148 | 
             
                         { val[0] }
         | 
| 149 | 
            +
                         | var_def
         | 
| 150 | 
            +
                         { val[0] }
         | 
| 121 151 | 
             
                         | import
         | 
| 122 152 | 
             
                         { val[0] }
         | 
| 123 153 | 
             
                         | include
         | 
| @@ -144,8 +174,23 @@ rule | |
| 144 174 | 
             
                         { val[0] }
         | 
| 145 175 | 
             
                         | while
         | 
| 146 176 | 
             
                         { val[0] }
         | 
| 177 | 
            +
                         | switch
         | 
| 178 | 
            +
                         { val[0] }
         | 
| 179 | 
            +
                         | case
         | 
| 180 | 
            +
                         { val[0] }
         | 
| 147 181 | 
             
                         ;
         | 
| 148 182 |  | 
| 183 | 
            +
              namespace  : NAMESPACE ident LBRACE statements RBRACE 
         | 
| 184 | 
            +
                         { n(:Namespace, *val) }
         | 
| 185 | 
            +
                         | NAMESPACE ident LBRACE RBRACE
         | 
| 186 | 
            +
                         { n(:Namespace, *val) }
         | 
| 187 | 
            +
                         ;
         | 
| 188 | 
            +
             | 
| 189 | 
            +
              obj_decl   : OBJECT ident LBRACE obj_statements RBRACE
         | 
| 190 | 
            +
                         { n(:Object, *val) }
         | 
| 191 | 
            +
                         | NAMESPACE ident LBRACE RBRACE
         | 
| 192 | 
            +
                         { n(:Namespace, *val) }
         | 
| 193 | 
            +
                         ;
         | 
| 149 194 | 
             
              ##############################################################################
         | 
| 150 195 | 
             
              # Simple Statements
         | 
| 151 196 | 
             
              ##############################################################################
         | 
| @@ -178,6 +223,10 @@ rule | |
| 178 223 | 
             
                         { n(:Global, *val) }
         | 
| 179 224 | 
             
                         ;
         | 
| 180 225 |  | 
| 226 | 
            +
              var_def    : VAR var_decls SEMICOLON
         | 
| 227 | 
            +
                         { n(:Local, *val) }
         | 
| 228 | 
            +
                         ;
         | 
| 229 | 
            +
             | 
| 181 230 | 
             
              incr       : incr_exp SEMICOLON
         | 
| 182 231 | 
             
                         { val[0] }
         | 
| 183 232 | 
             
                         ;
         | 
| @@ -194,6 +243,10 @@ rule | |
| 194 243 | 
             
                         { n(:Local, *val) }
         | 
| 195 244 | 
             
                         ;
         | 
| 196 245 |  | 
| 246 | 
            +
              local      : LOCAL var_decls SEMICOLON
         | 
| 247 | 
            +
                         { n(:Local, *val) }
         | 
| 248 | 
            +
                         ;
         | 
| 249 | 
            +
             | 
| 197 250 | 
             
              rep        : call_exp REP expr SEMICOLON
         | 
| 198 251 | 
             
                         { n(:Repetition, *val[0..-1]) }
         | 
| 199 252 | 
             
                         ;
         | 
| @@ -206,16 +259,53 @@ rule | |
| 206 259 | 
             
                         { n(:Return, *val) }
         | 
| 207 260 | 
             
                         ;
         | 
| 208 261 |  | 
| 262 | 
            +
              obj_func_attr : /* Empty */ 
         | 
| 263 | 
            +
                            { nil }
         | 
| 264 | 
            +
                            | PUBLIC 
         | 
| 265 | 
            +
                            { val[0] }
         | 
| 266 | 
            +
                            | PRIVATE
         | 
| 267 | 
            +
                            { val[0] }
         | 
| 268 | 
            +
                            ;
         | 
| 269 | 
            +
                            
         | 
| 209 270 | 
             
              ##############################################################################
         | 
| 210 271 | 
             
              # Compound Statements
         | 
| 211 272 | 
             
              ##############################################################################
         | 
| 212 | 
            -
             | 
| 213 273 | 
             
              block      : LBRACE statements RBRACE
         | 
| 214 274 | 
             
                         { n(:Block, *val) }
         | 
| 215 275 | 
             
                         | LBRACE RBRACE
         | 
| 216 276 | 
             
                         { n(:Block, *val) }
         | 
| 217 277 | 
             
                         ;
         | 
| 218 278 |  | 
| 279 | 
            +
              switch     : SWITCH LPAREN expr RPAREN switch_block
         | 
| 280 | 
            +
                         { n(:Switch, *val) }
         | 
| 281 | 
            +
                         | SWITCH LBRACK switch_op RBRACK LPAREN expr RPAREN switch_block
         | 
| 282 | 
            +
                         { n(:Switch, *val) }
         | 
| 283 | 
            +
                         ;
         | 
| 284 | 
            +
             
         | 
| 285 | 
            +
              case       : CASE case_expr_list COLON
         | 
| 286 | 
            +
                         { n(:Case, *val) }
         | 
| 287 | 
            +
                         | CASE LBRACK switch_op RBRACK case_expr_list COLON
         | 
| 288 | 
            +
                         { n(:Case, *val) }
         | 
| 289 | 
            +
                         | DEFAULT COLON
         | 
| 290 | 
            +
                         { n(:Case, *val) }
         | 
| 291 | 
            +
                         ;
         | 
| 292 | 
            +
             | 
| 293 | 
            +
              case_expr  : expr
         | 
| 294 | 
            +
                         { val[0] }
         | 
| 295 | 
            +
                         ;
         | 
| 296 | 
            +
             | 
| 297 | 
            +
              case_expr_list : case_expr
         | 
| 298 | 
            +
                             { val[0] }
         | 
| 299 | 
            +
                             | case_expr COMMA case_expr_list
         | 
| 300 | 
            +
                             { [val[0]] + val[2] }
         | 
| 301 | 
            +
                             ;
         | 
| 302 | 
            +
              
         | 
| 303 | 
            +
              switch_block  : LBRACE case statements RBRACE
         | 
| 304 | 
            +
                            { n(:Block, *val) }
         | 
| 305 | 
            +
                            | LBRACE RBRACE
         | 
| 306 | 
            +
                            { n(:Block, *val) }
         | 
| 307 | 
            +
                            ;
         | 
| 308 | 
            +
             | 
| 219 309 | 
             
              for        : FOR LPAREN field SEMICOLON expr SEMICOLON field RPAREN statement
         | 
| 220 310 | 
             
                         { n(:For, *val) }
         | 
| 221 311 | 
             
                         ;
         | 
| @@ -364,13 +454,47 @@ rule | |
| 364 454 | 
             
                         { val[0] }
         | 
| 365 455 | 
             
                         ;
         | 
| 366 456 |  | 
| 457 | 
            +
              switch_op  : SUBSTR_EQ
         | 
| 458 | 
            +
                         { val[0] }
         | 
| 459 | 
            +
                         | SUBSTR_NE
         | 
| 460 | 
            +
                         { val[0] }
         | 
| 461 | 
            +
                         | REGEX_EQ
         | 
| 462 | 
            +
                         { val[0] }
         | 
| 463 | 
            +
                         | REGEX_NE
         | 
| 464 | 
            +
                         { val[0] }
         | 
| 465 | 
            +
                         | CMP_LT 
         | 
| 466 | 
            +
                         { val[0] }
         | 
| 467 | 
            +
                         | CMP_GT
         | 
| 468 | 
            +
                         { val[0] }
         | 
| 469 | 
            +
                         | CMP_EQ
         | 
| 470 | 
            +
                         { val[0] }
         | 
| 471 | 
            +
                         | CMP_NE
         | 
| 472 | 
            +
                         { val[0] }
         | 
| 473 | 
            +
                         | CMP_LE
         | 
| 474 | 
            +
                         { val[0] }
         | 
| 475 | 
            +
                         | CMP_GE
         | 
| 476 | 
            +
                         { val[0] }
         | 
| 477 | 
            +
                         | AMPERSAND
         | 
| 478 | 
            +
                         { val[0] }
         | 
| 479 | 
            +
                         | BIT_XOR
         | 
| 480 | 
            +
                         { val[0] }
         | 
| 481 | 
            +
                         | BIT_OR
         | 
| 482 | 
            +
                         { val[0] } 
         | 
| 483 | 
            +
                         ;
         | 
| 484 | 
            +
             
         | 
| 485 | 
            +
             
         | 
| 486 | 
            +
              ident_ex   : ident
         | 
| 487 | 
            +
                         { val[0] }
         | 
| 488 | 
            +
                         | VAR 
         | 
| 489 | 
            +
                         { val[0] }
         | 
| 490 | 
            +
             | 
| 367 491 | 
             
              ##############################################################################
         | 
| 368 492 | 
             
              # Named Components
         | 
| 369 493 | 
             
              ##############################################################################
         | 
| 370 494 |  | 
| 371 | 
            -
              arg        :  | 
| 495 | 
            +
              arg        : ident_ex COLON expr
         | 
| 372 496 | 
             
                         { n(:Argument, *val) }
         | 
| 373 | 
            -
                         |  | 
| 497 | 
            +
                         | ident_ex COLON ref
         | 
| 374 498 | 
             
                         { n(:Argument, *val) }
         | 
| 375 499 | 
             
                         | expr
         | 
| 376 500 | 
             
                         { n(:Argument, *val) }
         | 
| @@ -480,12 +604,22 @@ rule | |
| 480 604 | 
             
                         { [val[0]] }
         | 
| 481 605 | 
             
                         ;
         | 
| 482 606 |  | 
| 607 | 
            +
              obj_statements  : obj_statement obj_statements
         | 
| 608 | 
            +
                              { [val[0]] + val[1] }
         | 
| 609 | 
            +
                              | obj_statement
         | 
| 610 | 
            +
                              { [val[0]] }
         | 
| 611 | 
            +
                              ;
         | 
| 612 | 
            +
             | 
| 483 613 | 
             
              statements : statement statements
         | 
| 484 614 | 
             
                         { [val[0]] + val[1] }
         | 
| 485 615 | 
             
                         | statement
         | 
| 486 616 | 
             
                         { [val[0]] }
         | 
| 487 617 | 
             
                         ;
         | 
| 488 618 |  | 
| 619 | 
            +
              obj_var    : VAR var_decls
         | 
| 620 | 
            +
                         { n(:ObjVar, *val) }
         | 
| 621 | 
            +
                         ;
         | 
| 622 | 
            +
             | 
| 489 623 | 
             
              var_decl   : ident ASS_EQ expr
         | 
| 490 624 | 
             
                         { n(:Assignment, *val) }
         | 
| 491 625 | 
             
                         | ident ASS_EQ ref
         | 
| @@ -546,6 +680,7 @@ require 'nasl/parser/argument' | |
| 546 680 | 
             
            require 'nasl/parser/array'
         | 
| 547 681 | 
             
            require 'nasl/parser/assigment'
         | 
| 548 682 | 
             
            require 'nasl/parser/block'
         | 
| 683 | 
            +
            require 'nasl/parser/namespace'
         | 
| 549 684 | 
             
            require 'nasl/parser/break'
         | 
| 550 685 | 
             
            require 'nasl/parser/call'
         | 
| 551 686 | 
             
            require 'nasl/parser/comment'
         | 
| @@ -577,6 +712,10 @@ require 'nasl/parser/return' | |
| 577 712 | 
             
            require 'nasl/parser/string'
         | 
| 578 713 | 
             
            require 'nasl/parser/undefined'
         | 
| 579 714 | 
             
            require 'nasl/parser/while'
         | 
| 715 | 
            +
            require 'nasl/parser/object'
         | 
| 716 | 
            +
            require 'nasl/parser/switch'
         | 
| 717 | 
            +
            require 'nasl/parser/case'
         | 
| 718 | 
            +
            require 'nasl/parser/obj_var'
         | 
| 580 719 |  | 
| 581 720 | 
             
            ---- inner ----
         | 
| 582 721 |  | 
    
        data/lib/nasl/parser/block.rb
    CHANGED
    
    | @@ -35,7 +35,13 @@ module Nasl | |
| 35 35 | 
             
                def initialize(tree, *tokens)
         | 
| 36 36 | 
             
                  super
         | 
| 37 37 |  | 
| 38 | 
            -
                   | 
| 38 | 
            +
                  if (@tokens.length == 4)
         | 
| 39 | 
            +
                    @body = [@tokens[1]] + @tokens[2]
         | 
| 40 | 
            +
                  elsif (@tokens.length == 3)
         | 
| 41 | 
            +
                    @body = @tokens[1]
         | 
| 42 | 
            +
                  else
         | 
| 43 | 
            +
                    @body = []
         | 
| 44 | 
            +
                  end
         | 
| 39 45 |  | 
| 40 46 | 
             
                  @children << :body
         | 
| 41 47 | 
             
                end
         | 
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            ################################################################################
         | 
| 2 | 
            +
            # Copyright (c) 2011-2018, Tenable Network Security
         | 
| 3 | 
            +
            # All rights reserved.
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # Redistribution and use in source and binary forms, with or without
         | 
| 6 | 
            +
            # modification, are permitted provided that the following conditions are met:
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # 1. Redistributions of source code must retain the above copyright notice, this
         | 
| 9 | 
            +
            #    list of conditions and the following disclaimer.
         | 
| 10 | 
            +
            #
         | 
| 11 | 
            +
            # 2. Redistributions in binary form must reproduce the above copyright notice,
         | 
| 12 | 
            +
            #    this list of conditions and the following disclaimer in the documentation
         | 
| 13 | 
            +
            #    and/or other materials provided with the distribution.
         | 
| 14 | 
            +
            #
         | 
| 15 | 
            +
            # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
         | 
| 16 | 
            +
            # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
         | 
| 17 | 
            +
            # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 18 | 
            +
            # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
         | 
| 19 | 
            +
            # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
         | 
| 20 | 
            +
            # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
         | 
| 21 | 
            +
            # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
         | 
| 22 | 
            +
            # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
         | 
| 23 | 
            +
            # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
         | 
| 24 | 
            +
            # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
| 25 | 
            +
            ################################################################################
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            require 'nasl/parser/node'
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            module Nasl
         | 
| 30 | 
            +
              class Case < Node
         | 
| 31 | 
            +
                attr_reader :case_val, :case_op, :case_type
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def initialize(tree, *tokens)
         | 
| 34 | 
            +
                  super
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  if @tokens.length == 3
         | 
| 37 | 
            +
                    @case_op = nil 
         | 
| 38 | 
            +
                    @case_val = @tokens[1]
         | 
| 39 | 
            +
                    @case_type = 'normal'
         | 
| 40 | 
            +
                  elsif @tokens.length == 6
         | 
| 41 | 
            +
                    @case_op = @tokens[2]
         | 
| 42 | 
            +
                    @case_val = @tokens[4]
         | 
| 43 | 
            +
                    @case_type = 'normal_with_op'
         | 
| 44 | 
            +
                  else
         | 
| 45 | 
            +
                    @case_op = nil 
         | 
| 46 | 
            +
                    @case_val = nil
         | 
| 47 | 
            +
                    @case_type = 'default'
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  @children << :case_val
         | 
| 51 | 
            +
                  @children << :case_op
         | 
| 52 | 
            +
                  @children << :case_type
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
            end
         | 
    
        data/lib/nasl/parser/function.rb
    CHANGED
    
    | @@ -28,18 +28,43 @@ require 'nasl/parser/node' | |
| 28 28 |  | 
| 29 29 | 
             
            module Nasl
         | 
| 30 30 | 
             
              class Function < Node
         | 
| 31 | 
            -
                attr_reader :body, :name, :params
         | 
| 31 | 
            +
                attr_reader :body, :name, :params, :attribute, :fn_type
         | 
| 32 32 |  | 
| 33 33 | 
             
                def initialize(tree, *tokens)
         | 
| 34 34 | 
             
                  super
         | 
| 35 35 |  | 
| 36 | 
            -
                  @name = @tokens[1]
         | 
| 37 | 
            -
                  @params = if @tokens.length == 6 then @tokens[3] else [] end
         | 
| 38 36 | 
             
                  @body = @tokens.last
         | 
| 39 37 |  | 
| 38 | 
            +
                  @fn_type = @tokens[1]
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  if @fn_type == "obj"
         | 
| 41 | 
            +
                    @name = @tokens[3]
         | 
| 42 | 
            +
                    @attribute = @tokens[0]
         | 
| 43 | 
            +
                    if @tokens.length == 8 
         | 
| 44 | 
            +
                      @params = @tokens[5]          
         | 
| 45 | 
            +
                    else
         | 
| 46 | 
            +
                      @params = []
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
                  else
         | 
| 49 | 
            +
                    @name = @tokens[2]
         | 
| 50 | 
            +
                    @attribute = []
         | 
| 51 | 
            +
                    if @tokens.length == 7
         | 
| 52 | 
            +
                      @params = @tokens[4]
         | 
| 53 | 
            +
                    else
         | 
| 54 | 
            +
                      @params = []
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 40 58 | 
             
                  @children << :name
         | 
| 59 | 
            +
                  @children << :attribute
         | 
| 41 60 | 
             
                  @children << :params
         | 
| 42 61 | 
             
                  @children << :body
         | 
| 62 | 
            +
                  @children << :fn_type
         | 
| 43 63 | 
             
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                def each
         | 
| 66 | 
            +
                  @body.each{ |stmt| yield stmt }
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
             | 
| 44 69 | 
             
              end
         | 
| 45 70 | 
             
            end
         |