Browse code

Fix some ClamAV with YARA issues and turn on some more YARA parser features.

Steven Morgan authored on 2015/02/25 06:11:06
Showing 4 changed files
... ...
@@ -3489,6 +3489,7 @@ static int load_oneyara(YR_RULE *rule, struct cl_engine *engine, unsigned int op
3489 3489
 static int cli_loadyara(FILE *fs, struct cl_engine *engine, unsigned int *signo, unsigned int options, struct cli_dbio *dbio, const char *dbname)
3490 3490
 {
3491 3491
     YR_COMPILER compiler = {0};
3492
+    YR_NAMESPACE ns;
3492 3493
     YR_RULE *rule;
3493 3494
     unsigned int sigs = 0, rules = 0;
3494 3495
     int rc;
... ...
@@ -3504,6 +3505,8 @@ static int cli_loadyara(FILE *fs, struct cl_engine *engine, unsigned int *signo,
3504 3504
 
3505 3505
     rc = yr_hash_table_create(10007, &compiler.rules_table);
3506 3506
     if (rc == ERROR_SUCCESS)
3507
+        rc = yr_hash_table_create(10007, &compiler.objects_table);
3508
+    if (rc == ERROR_SUCCESS)
3507 3509
         rc = yr_arena_create(65536, 0, &compiler.sz_arena);
3508 3510
     if (rc == ERROR_SUCCESS)
3509 3511
         rc = yr_arena_create(65536, 0, &compiler.code_arena);
... ...
@@ -3511,7 +3514,9 @@ static int cli_loadyara(FILE *fs, struct cl_engine *engine, unsigned int *signo,
3511 3511
         rc = yr_arena_create(65536, 0, &compiler.strings_arena);
3512 3512
     if (rc != ERROR_SUCCESS)
3513 3513
         return CL_EMEM;
3514
-
3514
+    compiler.loop_for_of_mem_offset = -1;
3515
+    ns.name = "default";
3516
+    compiler.current_namespace = &ns;
3515 3517
 
3516 3518
     rc = yr_lex_parse_rules_file(fs, &compiler);
3517 3519
     if (rc > 0) { /* rc = number of errors */
... ...
@@ -3519,6 +3524,7 @@ static int cli_loadyara(FILE *fs, struct cl_engine *engine, unsigned int *signo,
3519 3519
         cli_errmsg("cli_loadyara: failed to parse rules file %s, error count %i\n", dbname, rc);
3520 3520
 #ifdef YARA_FINISHED
3521 3521
         yr_hash_table_destroy(compiler.rules_table, NULL);
3522
+        yr_hash_table_destroy(compiler.objects_table, NULL);
3522 3523
         yr_arena_destroy(compiler.sz_arena);
3523 3524
         yr_arena_destroy(compiler.code_arena);
3524 3525
         yr_arena_destroy(compiler.strings_arena);
... ...
@@ -3544,6 +3550,7 @@ static int cli_loadyara(FILE *fs, struct cl_engine *engine, unsigned int *signo,
3544 3544
     }
3545 3545
 
3546 3546
     yr_hash_table_destroy(compiler.rules_table, NULL);
3547
+    yr_hash_table_destroy(compiler.objects_table, NULL);
3547 3548
     yr_arena_destroy(compiler.sz_arena);
3548 3549
     yr_arena_destroy(compiler.code_arena);
3549 3550
     yr_arena_destroy(compiler.strings_arena);
... ...
@@ -166,6 +166,13 @@ typedef struct _YR_OBJECT
166 166
 
167 167
 } YR_OBJECT;
168 168
 
169
+typedef struct _YR_OBJECT_ARRAY
170
+{
171
+  OBJECT_COMMON_FIELDS
172
+  struct _YR_ARRAY_ITEMS* items;
173
+
174
+} YR_OBJECT_ARRAY;
175
+
169 176
 typedef struct _YR_OBJECT_FUNCTION
170 177
 {
171 178
   OBJECT_COMMON_FIELDS
... ...
@@ -179,6 +186,13 @@ typedef struct _YR_OBJECT_FUNCTION
179 179
 
180 180
 } YR_OBJECT_FUNCTION;
181 181
 
182
+typedef struct _YR_ARRAY_ITEMS
183
+{
184
+  int count;
185
+  YR_OBJECT* objects[1];
186
+
187
+} YR_ARRAY_ITEMS;
188
+
182 189
 /* From libyara/include/yara/sizedstr.h            */
183 190
 #define SIZED_STRING_FLAGS_NO_CASE  1
184 191
 #define SIZED_STRING_FLAGS_DOT_ALL  2
... ...
@@ -381,6 +395,12 @@ typedef struct _YR_EXTERNAL_VARIABLE
381 381
 
382 382
 } YR_EXTERNAL_VARIABLE;
383 383
 
384
+typedef struct _YR_NAMESPACE
385
+{
386
+
387
+  DECLARE_REFERENCE(char*, name);
388
+
389
+} YR_NAMESPACE;
384 390
 
385 391
 /* From libyara/include/yara/exec.h            */
386 392
 typedef struct RE RE;
... ...
@@ -496,7 +516,8 @@ typedef struct _yc_compiler {
496 496
     YR_ARENA*           strings_arena;
497 497
     YR_ARENA*           code_arena;
498 498
     YR_HASH_TABLE*      rules_table;
499
-
499
+    YR_HASH_TABLE*      objects_table;
500
+    YR_NAMESPACE*       current_namespace;
500 501
     yc_string*          current_rule_strings;
501 502
     uint32_t            current_rule_flags;
502 503
 
... ...
@@ -658,14 +658,14 @@ static const yytype_uint16 yyrline[] =
658 658
      270,   300,   304,   332,   337,   338,   343,   344,   350,   353,
659 659
      373,   390,   429,   430,   435,   451,   464,   477,   494,   495,
660 660
      500,   514,   513,   530,   547,   548,   553,   554,   555,   556,
661
-     561,   658,   709,   734,   776,   779,   801,   834,   881,   899,
662
-     908,   917,   932,   946,   959,   974,   988,  1022,   987,  1133,
663
-    1132,  1208,  1214,  1220,  1226,  1234,  1243,  1252,  1261,  1270,
664
-    1297,  1324,  1351,  1355,  1363,  1364,  1369,  1391,  1403,  1419,
665
-    1418,  1424,  1436,  1437,  1442,  1447,  1456,  1457,  1464,  1475,
666
-    1479,  1488,  1503,  1514,  1525,  1536,  1547,  1558,  1569,  1578,
667
-    1603,  1616,  1629,  1649,  1684,  1693,  1702,  1711,  1720,  1729,
668
-    1738,  1747,  1756,  1764,  1773,  1782
661
+     561,   646,   695,   718,   758,   761,   783,   816,   863,   881,
662
+     890,   899,   914,   928,   941,   956,   970,  1004,   969,  1115,
663
+    1114,  1190,  1196,  1202,  1208,  1216,  1225,  1234,  1243,  1252,
664
+    1279,  1306,  1333,  1337,  1345,  1346,  1351,  1373,  1385,  1401,
665
+    1400,  1406,  1418,  1419,  1424,  1429,  1438,  1439,  1446,  1457,
666
+    1461,  1470,  1485,  1496,  1507,  1518,  1529,  1540,  1551,  1560,
667
+    1585,  1598,  1611,  1631,  1666,  1675,  1684,  1693,  1702,  1711,
668
+    1720,  1729,  1738,  1746,  1755,  1764
669 669
 };
670 670
 #endif
671 671
 
... ...
@@ -2338,28 +2338,23 @@ yyreduce:
2338 2338
         {
2339 2339
           // Search for identifier within the global namespace, where the
2340 2340
           // externals variables reside.
2341
-#if REAL_YARA //externals/objects/modules not supported
2342 2341
           object = (YR_OBJECT*) yr_hash_table_lookup(
2343 2342
                 compiler->objects_table,
2344 2343
                 (yyvsp[(1) - (1)].c_string),
2345 2344
                 NULL);
2346
-#endif
2347 2345
           if (object == NULL)
2348 2346
           {
2349 2347
             // If not found, search within the current namespace.
2350 2348
 
2351
-#if REAL_YARA //externals/objects/modules not supported
2352 2349
             ns = compiler->current_namespace->name;
2353 2350
             object = (YR_OBJECT*) yr_hash_table_lookup(
2354 2351
                 compiler->objects_table,
2355 2352
                 (yyvsp[(1) - (1)].c_string),
2356 2353
                 ns);
2357
-#endif
2358 2354
           }
2359 2355
 
2360 2356
           if (object != NULL)
2361 2357
           {
2362
-#if REAL_YARA //externals/objects/modules not supported
2363 2358
             compiler->last_result = yr_arena_write_string(
2364 2359
                 compiler->sz_arena,
2365 2360
                 (yyvsp[(1) - (1)].c_string),
... ...
@@ -2371,21 +2366,15 @@ yyreduce:
2371 2371
                   OP_OBJ_LOAD,
2372 2372
                   PTR_TO_UINT64(id),
2373 2373
                   NULL);
2374
-#endif
2375 2374
 
2376 2375
             (yyval.object) = object;
2377 2376
           }
2378 2377
           else
2379 2378
           {
2380
-              //#if REAL_YARA
2381 2379
            rule = (YR_RULE*) yr_hash_table_lookup(
2382 2380
                 compiler->rules_table,
2383 2381
                 (yyvsp[(1) - (1)].c_string),
2384
-#if REAL_YARA
2385 2382
                 compiler->current_namespace->name);
2386
-#else
2387
-                NULL);
2388
-#endif
2389 2383
             if (rule != NULL)
2390 2384
             {
2391 2385
               compiler->last_result = yr_parser_emit_with_arg_reloc(
... ...
@@ -2399,7 +2388,6 @@ yyreduce:
2399 2399
               yr_compiler_set_error_extra_info(compiler, (yyvsp[(1) - (1)].c_string));
2400 2400
               compiler->last_result = ERROR_UNDEFINED_IDENTIFIER;
2401 2401
             }
2402
-            //#endif
2403 2402
 
2404 2403
             (yyval.object) = (YR_OBJECT*) -2;
2405 2404
           }
... ...
@@ -2414,9 +2402,8 @@ yyreduce:
2414 2414
   case 41:
2415 2415
 
2416 2416
 /* Line 1806 of yacc.c  */
2417
-#line 659 "yara_grammar.y"
2417
+#line 647 "yara_grammar.y"
2418 2418
     {
2419
-#ifdef REAL_YARA //externals/objects/modules not supported
2420 2419
         YR_OBJECT* object = (yyvsp[(1) - (3)].object);
2421 2420
         YR_OBJECT* field = NULL;
2422 2421
 
... ...
@@ -2463,16 +2450,14 @@ yyreduce:
2463 2463
         yr_free((yyvsp[(3) - (3)].c_string));
2464 2464
 
2465 2465
         ERROR_IF(compiler->last_result != ERROR_SUCCESS);
2466
-#endif
2467 2466
       }
2468 2467
     break;
2469 2468
 
2470 2469
   case 42:
2471 2470
 
2472 2471
 /* Line 1806 of yacc.c  */
2473
-#line 710 "yara_grammar.y"
2472
+#line 696 "yara_grammar.y"
2474 2473
     {
2475
-#ifdef REAL_YARA //externals/objects/modules not supported
2476 2474
         if ((yyvsp[(1) - (4)].object) != NULL && (yyvsp[(1) - (4)].object)->type == OBJECT_TYPE_ARRAY)
2477 2475
         {
2478 2476
           compiler->last_result = yr_parser_emit(
... ...
@@ -2480,7 +2465,7 @@ yyreduce:
2480 2480
               OP_INDEX_ARRAY,
2481 2481
               NULL);
2482 2482
 
2483
-X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->items->objects[0];
2483
+          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->items->objects[0];
2484 2484
         }
2485 2485
         else
2486 2486
         {
... ...
@@ -2492,16 +2477,14 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2492 2492
         }
2493 2493
 
2494 2494
         ERROR_IF(compiler->last_result != ERROR_SUCCESS);
2495
-#endif
2496 2495
       }
2497 2496
     break;
2498 2497
 
2499 2498
   case 43:
2500 2499
 
2501 2500
 /* Line 1806 of yacc.c  */
2502
-#line 735 "yara_grammar.y"
2501
+#line 719 "yara_grammar.y"
2503 2502
     {
2504
-#ifdef REAL_YARA //externals/objects/modules not supported
2505 2503
         int args_count;
2506 2504
 
2507 2505
         if ((yyvsp[(1) - (4)].object) != NULL && (yyvsp[(1) - (4)].object)->type == OBJECT_TYPE_FUNCTION)
... ...
@@ -2534,14 +2517,13 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2534 2534
         yr_free((yyvsp[(3) - (4)].c_string));
2535 2535
 
2536 2536
         ERROR_IF(compiler->last_result != ERROR_SUCCESS);
2537
-#endif
2538 2537
       }
2539 2538
     break;
2540 2539
 
2541 2540
   case 44:
2542 2541
 
2543 2542
 /* Line 1806 of yacc.c  */
2544
-#line 776 "yara_grammar.y"
2543
+#line 758 "yara_grammar.y"
2545 2544
     {
2546 2545
         (yyval.c_string) = yr_strdup("");
2547 2546
       }
... ...
@@ -2550,7 +2532,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2550 2550
   case 45:
2551 2551
 
2552 2552
 /* Line 1806 of yacc.c  */
2553
-#line 780 "yara_grammar.y"
2553
+#line 762 "yara_grammar.y"
2554 2554
     {
2555 2555
         (yyval.c_string) = yr_malloc(MAX_FUNCTION_ARGS + 1);
2556 2556
 
... ...
@@ -2577,7 +2559,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2577 2577
   case 46:
2578 2578
 
2579 2579
 /* Line 1806 of yacc.c  */
2580
-#line 802 "yara_grammar.y"
2580
+#line 784 "yara_grammar.y"
2581 2581
     {
2582 2582
         if (strlen((yyvsp[(1) - (3)].c_string)) == MAX_FUNCTION_ARGS)
2583 2583
         {
... ...
@@ -2611,7 +2593,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2611 2611
   case 47:
2612 2612
 
2613 2613
 /* Line 1806 of yacc.c  */
2614
-#line 835 "yara_grammar.y"
2614
+#line 817 "yara_grammar.y"
2615 2615
     {
2616 2616
 #ifdef REAL_YARA
2617 2617
         SIZED_STRING* sized_string = (yyvsp[(1) - (1)].sized_string);
... ...
@@ -2659,7 +2641,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2659 2659
   case 48:
2660 2660
 
2661 2661
 /* Line 1806 of yacc.c  */
2662
-#line 882 "yara_grammar.y"
2662
+#line 864 "yara_grammar.y"
2663 2663
     {
2664 2664
         if ((yyvsp[(1) - (1)].expression_type) == EXPRESSION_TYPE_STRING)
2665 2665
         {
... ...
@@ -2679,7 +2661,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2679 2679
   case 49:
2680 2680
 
2681 2681
 /* Line 1806 of yacc.c  */
2682
-#line 900 "yara_grammar.y"
2682
+#line 882 "yara_grammar.y"
2683 2683
     {
2684 2684
         compiler->last_result = yr_parser_emit_with_arg(
2685 2685
             yyscanner, OP_PUSH, 1, NULL);
... ...
@@ -2693,7 +2675,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2693 2693
   case 50:
2694 2694
 
2695 2695
 /* Line 1806 of yacc.c  */
2696
-#line 909 "yara_grammar.y"
2696
+#line 891 "yara_grammar.y"
2697 2697
     {
2698 2698
         compiler->last_result = yr_parser_emit_with_arg(
2699 2699
             yyscanner, OP_PUSH, 0, NULL);
... ...
@@ -2707,7 +2689,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2707 2707
   case 51:
2708 2708
 
2709 2709
 /* Line 1806 of yacc.c  */
2710
-#line 918 "yara_grammar.y"
2710
+#line 900 "yara_grammar.y"
2711 2711
     {
2712 2712
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_STRING, "matches");
2713 2713
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_REGEXP, "matches");
... ...
@@ -2727,7 +2709,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2727 2727
   case 52:
2728 2728
 
2729 2729
 /* Line 1806 of yacc.c  */
2730
-#line 933 "yara_grammar.y"
2730
+#line 915 "yara_grammar.y"
2731 2731
     {
2732 2732
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_STRING, "contains");
2733 2733
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_STRING, "contains");
... ...
@@ -2746,7 +2728,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2746 2746
   case 53:
2747 2747
 
2748 2748
 /* Line 1806 of yacc.c  */
2749
-#line 947 "yara_grammar.y"
2749
+#line 929 "yara_grammar.y"
2750 2750
     {
2751 2751
         int result = yr_parser_reduce_string_identifier(
2752 2752
             yyscanner,
... ...
@@ -2764,7 +2746,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2764 2764
   case 54:
2765 2765
 
2766 2766
 /* Line 1806 of yacc.c  */
2767
-#line 960 "yara_grammar.y"
2767
+#line 942 "yara_grammar.y"
2768 2768
     {
2769 2769
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "at");
2770 2770
 
... ...
@@ -2784,7 +2766,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2784 2784
   case 55:
2785 2785
 
2786 2786
 /* Line 1806 of yacc.c  */
2787
-#line 975 "yara_grammar.y"
2787
+#line 957 "yara_grammar.y"
2788 2788
     {
2789 2789
         compiler->last_result = yr_parser_reduce_string_identifier(
2790 2790
             yyscanner,
... ...
@@ -2802,7 +2784,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2802 2802
   case 56:
2803 2803
 
2804 2804
 /* Line 1806 of yacc.c  */
2805
-#line 988 "yara_grammar.y"
2805
+#line 970 "yara_grammar.y"
2806 2806
     {
2807 2807
         int var_index;
2808 2808
 
... ...
@@ -2841,7 +2823,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2841 2841
   case 57:
2842 2842
 
2843 2843
 /* Line 1806 of yacc.c  */
2844
-#line 1022 "yara_grammar.y"
2844
+#line 1004 "yara_grammar.y"
2845 2845
     {
2846 2846
         int mem_offset = LOOP_LOCAL_VARS * compiler->loop_depth;
2847 2847
 
... ...
@@ -2881,7 +2863,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2881 2881
   case 58:
2882 2882
 
2883 2883
 /* Line 1806 of yacc.c  */
2884
-#line 1057 "yara_grammar.y"
2884
+#line 1039 "yara_grammar.y"
2885 2885
     {
2886 2886
         int mem_offset;
2887 2887
 
... ...
@@ -2962,7 +2944,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2962 2962
   case 59:
2963 2963
 
2964 2964
 /* Line 1806 of yacc.c  */
2965
-#line 1133 "yara_grammar.y"
2965
+#line 1115 "yara_grammar.y"
2966 2966
     {
2967 2967
         int mem_offset = LOOP_LOCAL_VARS * compiler->loop_depth;
2968 2968
         int8_t* addr;
... ...
@@ -2997,7 +2979,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
2997 2997
   case 60:
2998 2998
 
2999 2999
 /* Line 1806 of yacc.c  */
3000
-#line 1163 "yara_grammar.y"
3000
+#line 1145 "yara_grammar.y"
3001 3001
     {
3002 3002
         int mem_offset;
3003 3003
 
... ...
@@ -3048,7 +3030,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3048 3048
   case 61:
3049 3049
 
3050 3050
 /* Line 1806 of yacc.c  */
3051
-#line 1209 "yara_grammar.y"
3051
+#line 1191 "yara_grammar.y"
3052 3052
     {
3053 3053
         yr_parser_emit(yyscanner, OP_OF, NULL);
3054 3054
 
... ...
@@ -3059,7 +3041,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3059 3059
   case 62:
3060 3060
 
3061 3061
 /* Line 1806 of yacc.c  */
3062
-#line 1215 "yara_grammar.y"
3062
+#line 1197 "yara_grammar.y"
3063 3063
     {
3064 3064
         yr_parser_emit(yyscanner, OP_NOT, NULL);
3065 3065
 
... ...
@@ -3070,7 +3052,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3070 3070
   case 63:
3071 3071
 
3072 3072
 /* Line 1806 of yacc.c  */
3073
-#line 1221 "yara_grammar.y"
3073
+#line 1203 "yara_grammar.y"
3074 3074
     {
3075 3075
         yr_parser_emit(yyscanner, OP_AND, NULL);
3076 3076
 
... ...
@@ -3081,7 +3063,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3081 3081
   case 64:
3082 3082
 
3083 3083
 /* Line 1806 of yacc.c  */
3084
-#line 1227 "yara_grammar.y"
3084
+#line 1209 "yara_grammar.y"
3085 3085
     {
3086 3086
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_BOOLEAN, "or");
3087 3087
 
... ...
@@ -3094,7 +3076,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3094 3094
   case 65:
3095 3095
 
3096 3096
 /* Line 1806 of yacc.c  */
3097
-#line 1235 "yara_grammar.y"
3097
+#line 1217 "yara_grammar.y"
3098 3098
     {
3099 3099
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "<");
3100 3100
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "<");
... ...
@@ -3108,7 +3090,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3108 3108
   case 66:
3109 3109
 
3110 3110
 /* Line 1806 of yacc.c  */
3111
-#line 1244 "yara_grammar.y"
3111
+#line 1226 "yara_grammar.y"
3112 3112
     {
3113 3113
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, ">");
3114 3114
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, ">");
... ...
@@ -3122,7 +3104,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3122 3122
   case 67:
3123 3123
 
3124 3124
 /* Line 1806 of yacc.c  */
3125
-#line 1253 "yara_grammar.y"
3125
+#line 1235 "yara_grammar.y"
3126 3126
     {
3127 3127
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "<=");
3128 3128
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "<=");
... ...
@@ -3136,7 +3118,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3136 3136
   case 68:
3137 3137
 
3138 3138
 /* Line 1806 of yacc.c  */
3139
-#line 1262 "yara_grammar.y"
3139
+#line 1244 "yara_grammar.y"
3140 3140
     {
3141 3141
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, ">=");
3142 3142
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, ">=");
... ...
@@ -3150,7 +3132,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3150 3150
   case 69:
3151 3151
 
3152 3152
 /* Line 1806 of yacc.c  */
3153
-#line 1271 "yara_grammar.y"
3153
+#line 1253 "yara_grammar.y"
3154 3154
     {
3155 3155
         if ((yyvsp[(1) - (3)].expression_type) != (yyvsp[(3) - (3)].expression_type))
3156 3156
         {
... ...
@@ -3182,7 +3164,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3182 3182
   case 70:
3183 3183
 
3184 3184
 /* Line 1806 of yacc.c  */
3185
-#line 1298 "yara_grammar.y"
3185
+#line 1280 "yara_grammar.y"
3186 3186
     {
3187 3187
         if ((yyvsp[(1) - (3)].expression_type) != (yyvsp[(3) - (3)].expression_type))
3188 3188
         {
... ...
@@ -3214,7 +3196,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3214 3214
   case 71:
3215 3215
 
3216 3216
 /* Line 1806 of yacc.c  */
3217
-#line 1325 "yara_grammar.y"
3217
+#line 1307 "yara_grammar.y"
3218 3218
     {
3219 3219
         if ((yyvsp[(1) - (3)].expression_type) != (yyvsp[(3) - (3)].expression_type))
3220 3220
         {
... ...
@@ -3246,7 +3228,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3246 3246
   case 72:
3247 3247
 
3248 3248
 /* Line 1806 of yacc.c  */
3249
-#line 1352 "yara_grammar.y"
3249
+#line 1334 "yara_grammar.y"
3250 3250
     {
3251 3251
         (yyval.expression_type) = (yyvsp[(1) - (1)].expression_type);
3252 3252
       }
... ...
@@ -3255,7 +3237,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3255 3255
   case 73:
3256 3256
 
3257 3257
 /* Line 1806 of yacc.c  */
3258
-#line 1356 "yara_grammar.y"
3258
+#line 1338 "yara_grammar.y"
3259 3259
     {
3260 3260
         (yyval.expression_type) = (yyvsp[(2) - (3)].expression_type);
3261 3261
       }
... ...
@@ -3264,21 +3246,21 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3264 3264
   case 74:
3265 3265
 
3266 3266
 /* Line 1806 of yacc.c  */
3267
-#line 1363 "yara_grammar.y"
3267
+#line 1345 "yara_grammar.y"
3268 3268
     { (yyval.integer) = INTEGER_SET_ENUMERATION; }
3269 3269
     break;
3270 3270
 
3271 3271
   case 75:
3272 3272
 
3273 3273
 /* Line 1806 of yacc.c  */
3274
-#line 1364 "yara_grammar.y"
3274
+#line 1346 "yara_grammar.y"
3275 3275
     { (yyval.integer) = INTEGER_SET_RANGE; }
3276 3276
     break;
3277 3277
 
3278 3278
   case 76:
3279 3279
 
3280 3280
 /* Line 1806 of yacc.c  */
3281
-#line 1370 "yara_grammar.y"
3281
+#line 1352 "yara_grammar.y"
3282 3282
     {
3283 3283
         if ((yyvsp[(2) - (6)].expression_type) != EXPRESSION_TYPE_INTEGER)
3284 3284
         {
... ...
@@ -3301,7 +3283,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3301 3301
   case 77:
3302 3302
 
3303 3303
 /* Line 1806 of yacc.c  */
3304
-#line 1392 "yara_grammar.y"
3304
+#line 1374 "yara_grammar.y"
3305 3305
     {
3306 3306
         if ((yyvsp[(1) - (1)].expression_type) != EXPRESSION_TYPE_INTEGER)
3307 3307
         {
... ...
@@ -3318,7 +3300,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3318 3318
   case 78:
3319 3319
 
3320 3320
 /* Line 1806 of yacc.c  */
3321
-#line 1404 "yara_grammar.y"
3321
+#line 1386 "yara_grammar.y"
3322 3322
     {
3323 3323
         if ((yyvsp[(3) - (3)].expression_type) != EXPRESSION_TYPE_INTEGER)
3324 3324
         {
... ...
@@ -3334,7 +3316,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3334 3334
   case 79:
3335 3335
 
3336 3336
 /* Line 1806 of yacc.c  */
3337
-#line 1419 "yara_grammar.y"
3337
+#line 1401 "yara_grammar.y"
3338 3338
     {
3339 3339
         // Push end-of-list marker
3340 3340
         yr_parser_emit_with_arg(yyscanner, OP_PUSH, UNDEFINED, NULL);
... ...
@@ -3344,7 +3326,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3344 3344
   case 81:
3345 3345
 
3346 3346
 /* Line 1806 of yacc.c  */
3347
-#line 1425 "yara_grammar.y"
3347
+#line 1407 "yara_grammar.y"
3348 3348
     {
3349 3349
         yr_parser_emit_with_arg(yyscanner, OP_PUSH, UNDEFINED, NULL);
3350 3350
         yr_parser_emit_pushes_for_strings(yyscanner, "$*");
... ...
@@ -3357,7 +3339,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3357 3357
   case 84:
3358 3358
 
3359 3359
 /* Line 1806 of yacc.c  */
3360
-#line 1443 "yara_grammar.y"
3360
+#line 1425 "yara_grammar.y"
3361 3361
     {
3362 3362
         yr_parser_emit_pushes_for_strings(yyscanner, (yyvsp[(1) - (1)].c_string));
3363 3363
         yr_free((yyvsp[(1) - (1)].c_string));
... ...
@@ -3367,7 +3349,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3367 3367
   case 85:
3368 3368
 
3369 3369
 /* Line 1806 of yacc.c  */
3370
-#line 1448 "yara_grammar.y"
3370
+#line 1430 "yara_grammar.y"
3371 3371
     {
3372 3372
         yr_parser_emit_pushes_for_strings(yyscanner, (yyvsp[(1) - (1)].c_string));
3373 3373
         yr_free((yyvsp[(1) - (1)].c_string));
... ...
@@ -3377,7 +3359,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3377 3377
   case 87:
3378 3378
 
3379 3379
 /* Line 1806 of yacc.c  */
3380
-#line 1458 "yara_grammar.y"
3380
+#line 1440 "yara_grammar.y"
3381 3381
     {
3382 3382
         yr_parser_emit_with_arg(yyscanner, OP_PUSH, UNDEFINED, NULL);
3383 3383
 #ifdef YARA_PROTO
... ...
@@ -3389,7 +3371,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3389 3389
   case 88:
3390 3390
 
3391 3391
 /* Line 1806 of yacc.c  */
3392
-#line 1465 "yara_grammar.y"
3392
+#line 1447 "yara_grammar.y"
3393 3393
     {
3394 3394
         yr_parser_emit_with_arg(yyscanner, OP_PUSH, 1, NULL);
3395 3395
 #ifdef YARA_PROTO
... ...
@@ -3401,7 +3383,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3401 3401
   case 89:
3402 3402
 
3403 3403
 /* Line 1806 of yacc.c  */
3404
-#line 1476 "yara_grammar.y"
3404
+#line 1458 "yara_grammar.y"
3405 3405
     {
3406 3406
         (yyval.expression_type) = (yyvsp[(2) - (3)].expression_type);
3407 3407
       }
... ...
@@ -3410,7 +3392,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3410 3410
   case 90:
3411 3411
 
3412 3412
 /* Line 1806 of yacc.c  */
3413
-#line 1480 "yara_grammar.y"
3413
+#line 1462 "yara_grammar.y"
3414 3414
     {
3415 3415
         compiler->last_result = yr_parser_emit(
3416 3416
             yyscanner, OP_FILESIZE, NULL);
... ...
@@ -3424,7 +3406,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3424 3424
   case 91:
3425 3425
 
3426 3426
 /* Line 1806 of yacc.c  */
3427
-#line 1489 "yara_grammar.y"
3427
+#line 1471 "yara_grammar.y"
3428 3428
     {
3429 3429
 #ifndef YARA_PROTO
3430 3430
         yywarning(yyscanner,
... ...
@@ -3444,7 +3426,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3444 3444
   case 92:
3445 3445
 
3446 3446
 /* Line 1806 of yacc.c  */
3447
-#line 1504 "yara_grammar.y"
3447
+#line 1486 "yara_grammar.y"
3448 3448
     {
3449 3449
         CHECK_TYPE((yyvsp[(3) - (4)].expression_type), EXPRESSION_TYPE_INTEGER, "int8");
3450 3450
 
... ...
@@ -3460,7 +3442,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3460 3460
   case 93:
3461 3461
 
3462 3462
 /* Line 1806 of yacc.c  */
3463
-#line 1515 "yara_grammar.y"
3463
+#line 1497 "yara_grammar.y"
3464 3464
     {
3465 3465
         CHECK_TYPE((yyvsp[(3) - (4)].expression_type), EXPRESSION_TYPE_INTEGER, "int16");
3466 3466
 
... ...
@@ -3476,7 +3458,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3476 3476
   case 94:
3477 3477
 
3478 3478
 /* Line 1806 of yacc.c  */
3479
-#line 1526 "yara_grammar.y"
3479
+#line 1508 "yara_grammar.y"
3480 3480
     {
3481 3481
         CHECK_TYPE((yyvsp[(3) - (4)].expression_type), EXPRESSION_TYPE_INTEGER, "int32");
3482 3482
 
... ...
@@ -3492,7 +3474,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3492 3492
   case 95:
3493 3493
 
3494 3494
 /* Line 1806 of yacc.c  */
3495
-#line 1537 "yara_grammar.y"
3495
+#line 1519 "yara_grammar.y"
3496 3496
     {
3497 3497
         CHECK_TYPE((yyvsp[(3) - (4)].expression_type), EXPRESSION_TYPE_INTEGER, "uint8");
3498 3498
 
... ...
@@ -3508,7 +3490,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3508 3508
   case 96:
3509 3509
 
3510 3510
 /* Line 1806 of yacc.c  */
3511
-#line 1548 "yara_grammar.y"
3511
+#line 1530 "yara_grammar.y"
3512 3512
     {
3513 3513
         CHECK_TYPE((yyvsp[(3) - (4)].expression_type), EXPRESSION_TYPE_INTEGER, "uint16");
3514 3514
 
... ...
@@ -3524,7 +3506,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3524 3524
   case 97:
3525 3525
 
3526 3526
 /* Line 1806 of yacc.c  */
3527
-#line 1559 "yara_grammar.y"
3527
+#line 1541 "yara_grammar.y"
3528 3528
     {
3529 3529
         CHECK_TYPE((yyvsp[(3) - (4)].expression_type), EXPRESSION_TYPE_INTEGER, "uint32");
3530 3530
 
... ...
@@ -3540,7 +3522,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3540 3540
   case 98:
3541 3541
 
3542 3542
 /* Line 1806 of yacc.c  */
3543
-#line 1570 "yara_grammar.y"
3543
+#line 1552 "yara_grammar.y"
3544 3544
     {
3545 3545
         compiler->last_result = yr_parser_emit_with_arg(
3546 3546
             yyscanner, OP_PUSH, (yyvsp[(1) - (1)].integer), NULL);
... ...
@@ -3554,7 +3536,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3554 3554
   case 99:
3555 3555
 
3556 3556
 /* Line 1806 of yacc.c  */
3557
-#line 1579 "yara_grammar.y"
3557
+#line 1561 "yara_grammar.y"
3558 3558
     {
3559 3559
         SIZED_STRING* sized_string = (yyvsp[(1) - (1)].sized_string);
3560 3560
         char* string;
... ...
@@ -3584,7 +3566,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3584 3584
   case 100:
3585 3585
 
3586 3586
 /* Line 1806 of yacc.c  */
3587
-#line 1604 "yara_grammar.y"
3587
+#line 1586 "yara_grammar.y"
3588 3588
     {
3589 3589
         compiler->last_result = yr_parser_reduce_string_identifier(
3590 3590
             yyscanner,
... ...
@@ -3602,7 +3584,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3602 3602
   case 101:
3603 3603
 
3604 3604
 /* Line 1806 of yacc.c  */
3605
-#line 1617 "yara_grammar.y"
3605
+#line 1599 "yara_grammar.y"
3606 3606
     {
3607 3607
         compiler->last_result = yr_parser_reduce_string_identifier(
3608 3608
             yyscanner,
... ...
@@ -3620,7 +3602,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3620 3620
   case 102:
3621 3621
 
3622 3622
 /* Line 1806 of yacc.c  */
3623
-#line 1630 "yara_grammar.y"
3623
+#line 1612 "yara_grammar.y"
3624 3624
     {
3625 3625
         compiler->last_result = yr_parser_emit_with_arg(
3626 3626
             yyscanner,
... ...
@@ -3645,7 +3627,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3645 3645
   case 103:
3646 3646
 
3647 3647
 /* Line 1806 of yacc.c  */
3648
-#line 1650 "yara_grammar.y"
3648
+#line 1632 "yara_grammar.y"
3649 3649
     {
3650 3650
         if ((yyvsp[(1) - (1)].object) == (YR_OBJECT*) -1)  // loop identifier
3651 3651
         {
... ...
@@ -3685,7 +3667,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3685 3685
   case 104:
3686 3686
 
3687 3687
 /* Line 1806 of yacc.c  */
3688
-#line 1685 "yara_grammar.y"
3688
+#line 1667 "yara_grammar.y"
3689 3689
     {
3690 3690
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "+");
3691 3691
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "+");
... ...
@@ -3699,7 +3681,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3699 3699
   case 105:
3700 3700
 
3701 3701
 /* Line 1806 of yacc.c  */
3702
-#line 1694 "yara_grammar.y"
3702
+#line 1676 "yara_grammar.y"
3703 3703
     {
3704 3704
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "-");
3705 3705
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "-");
... ...
@@ -3713,7 +3695,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3713 3713
   case 106:
3714 3714
 
3715 3715
 /* Line 1806 of yacc.c  */
3716
-#line 1703 "yara_grammar.y"
3716
+#line 1685 "yara_grammar.y"
3717 3717
     {
3718 3718
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "*");
3719 3719
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "*");
... ...
@@ -3727,7 +3709,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3727 3727
   case 107:
3728 3728
 
3729 3729
 /* Line 1806 of yacc.c  */
3730
-#line 1712 "yara_grammar.y"
3730
+#line 1694 "yara_grammar.y"
3731 3731
     {
3732 3732
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "\\");
3733 3733
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "\\");
... ...
@@ -3741,7 +3723,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3741 3741
   case 108:
3742 3742
 
3743 3743
 /* Line 1806 of yacc.c  */
3744
-#line 1721 "yara_grammar.y"
3744
+#line 1703 "yara_grammar.y"
3745 3745
     {
3746 3746
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "%");
3747 3747
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "%");
... ...
@@ -3755,7 +3737,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3755 3755
   case 109:
3756 3756
 
3757 3757
 /* Line 1806 of yacc.c  */
3758
-#line 1730 "yara_grammar.y"
3758
+#line 1712 "yara_grammar.y"
3759 3759
     {
3760 3760
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "^");
3761 3761
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "^");
... ...
@@ -3769,7 +3751,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3769 3769
   case 110:
3770 3770
 
3771 3771
 /* Line 1806 of yacc.c  */
3772
-#line 1739 "yara_grammar.y"
3772
+#line 1721 "yara_grammar.y"
3773 3773
     {
3774 3774
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "^");
3775 3775
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "^");
... ...
@@ -3783,7 +3765,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3783 3783
   case 111:
3784 3784
 
3785 3785
 /* Line 1806 of yacc.c  */
3786
-#line 1748 "yara_grammar.y"
3786
+#line 1730 "yara_grammar.y"
3787 3787
     {
3788 3788
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "|");
3789 3789
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "|");
... ...
@@ -3797,7 +3779,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3797 3797
   case 112:
3798 3798
 
3799 3799
 /* Line 1806 of yacc.c  */
3800
-#line 1757 "yara_grammar.y"
3800
+#line 1739 "yara_grammar.y"
3801 3801
     {
3802 3802
         CHECK_TYPE((yyvsp[(2) - (2)].expression_type), EXPRESSION_TYPE_INTEGER, "~");
3803 3803
 
... ...
@@ -3810,7 +3792,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3810 3810
   case 113:
3811 3811
 
3812 3812
 /* Line 1806 of yacc.c  */
3813
-#line 1765 "yara_grammar.y"
3813
+#line 1747 "yara_grammar.y"
3814 3814
     {
3815 3815
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "<<");
3816 3816
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, "<<");
... ...
@@ -3824,7 +3806,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3824 3824
   case 114:
3825 3825
 
3826 3826
 /* Line 1806 of yacc.c  */
3827
-#line 1774 "yara_grammar.y"
3827
+#line 1756 "yara_grammar.y"
3828 3828
     {
3829 3829
         CHECK_TYPE((yyvsp[(1) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, ">>");
3830 3830
         CHECK_TYPE((yyvsp[(3) - (3)].expression_type), EXPRESSION_TYPE_INTEGER, ">>");
... ...
@@ -3838,7 +3820,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3838 3838
   case 115:
3839 3839
 
3840 3840
 /* Line 1806 of yacc.c  */
3841
-#line 1783 "yara_grammar.y"
3841
+#line 1765 "yara_grammar.y"
3842 3842
     {
3843 3843
         (yyval.expression_type) = (yyvsp[(1) - (1)].expression_type);
3844 3844
       }
... ...
@@ -3847,7 +3829,7 @@ X          (yyval.object) = ((YR_OBJECT_ARRAY*) (yyvsp[(1) - (4)].object))->item
3847 3847
 
3848 3848
 
3849 3849
 /* Line 1806 of yacc.c  */
3850
-#line 3851 "yara_grammar.c"
3850
+#line 3833 "yara_grammar.c"
3851 3851
       default: break;
3852 3852
     }
3853 3853
   /* User semantic actions sometimes alter yychar, and that requires
... ...
@@ -4078,6 +4060,6 @@ yyreturn:
4078 4078
 
4079 4079
 
4080 4080
 /* Line 2067 of yacc.c  */
4081
-#line 1788 "yara_grammar.y"
4081
+#line 1770 "yara_grammar.y"
4082 4082
 
4083 4083
 
... ...
@@ -584,28 +584,23 @@ identifier
584 584
         {
585 585
           // Search for identifier within the global namespace, where the
586 586
           // externals variables reside.
587
-#if REAL_YARA //externals/objects/modules not supported
588 587
           object = (YR_OBJECT*) yr_hash_table_lookup(
589 588
                 compiler->objects_table,
590 589
                 $1,
591 590
                 NULL);
592
-#endif
593 591
           if (object == NULL)
594 592
           {
595 593
             // If not found, search within the current namespace.
596 594
 
597
-#if REAL_YARA //externals/objects/modules not supported
598 595
             ns = compiler->current_namespace->name;
599 596
             object = (YR_OBJECT*) yr_hash_table_lookup(
600 597
                 compiler->objects_table,
601 598
                 $1,
602 599
                 ns);
603
-#endif
604 600
           }
605 601
 
606 602
           if (object != NULL)
607 603
           {
608
-#if REAL_YARA //externals/objects/modules not supported
609 604
             compiler->last_result = yr_arena_write_string(
610 605
                 compiler->sz_arena,
611 606
                 $1,
... ...
@@ -617,21 +612,15 @@ identifier
617 617
                   OP_OBJ_LOAD,
618 618
                   PTR_TO_UINT64(id),
619 619
                   NULL);
620
-#endif
621 620
 
622 621
             $$ = object;
623 622
           }
624 623
           else
625 624
           {
626
-              //#if REAL_YARA
627 625
            rule = (YR_RULE*) yr_hash_table_lookup(
628 626
                 compiler->rules_table,
629 627
                 $1,
630
-#if REAL_YARA
631 628
                 compiler->current_namespace->name);
632
-#else
633
-                NULL);
634
-#endif
635 629
             if (rule != NULL)
636 630
             {
637 631
               compiler->last_result = yr_parser_emit_with_arg_reloc(
... ...
@@ -645,7 +634,6 @@ identifier
645 645
               yr_compiler_set_error_extra_info(compiler, $1);
646 646
               compiler->last_result = ERROR_UNDEFINED_IDENTIFIER;
647 647
             }
648
-            //#endif
649 648
 
650 649
             $$ = (YR_OBJECT*) -2;
651 650
           }
... ...
@@ -657,7 +645,6 @@ identifier
657 657
       }
658 658
     | identifier '.' _IDENTIFIER_
659 659
       {
660
-#ifdef REAL_YARA //externals/objects/modules not supported
661 660
         YR_OBJECT* object = $1;
662 661
         YR_OBJECT* field = NULL;
663 662
 
... ...
@@ -704,11 +691,9 @@ identifier
704 704
         yr_free($3);
705 705
 
706 706
         ERROR_IF(compiler->last_result != ERROR_SUCCESS);
707
-#endif
708 707
       }
709 708
     | identifier '[' primary_expression ']'
710 709
       {
711
-#ifdef REAL_YARA //externals/objects/modules not supported
712 710
         if ($1 != NULL && $1->type == OBJECT_TYPE_ARRAY)
713 711
         {
714 712
           compiler->last_result = yr_parser_emit(
... ...
@@ -716,7 +701,7 @@ identifier
716 716
               OP_INDEX_ARRAY,
717 717
               NULL);
718 718
 
719
-X          $$ = ((YR_OBJECT_ARRAY*) $1)->items->objects[0];
719
+          $$ = ((YR_OBJECT_ARRAY*) $1)->items->objects[0];
720 720
         }
721 721
         else
722 722
         {
... ...
@@ -728,12 +713,10 @@ X          $$ = ((YR_OBJECT_ARRAY*) $1)->items->objects[0];
728 728
         }
729 729
 
730 730
         ERROR_IF(compiler->last_result != ERROR_SUCCESS);
731
-#endif
732 731
       }
733 732
 
734 733
     | identifier '(' arguments_list ')'
735 734
       {
736
-#ifdef REAL_YARA //externals/objects/modules not supported
737 735
         int args_count;
738 736
 
739 737
         if ($1 != NULL && $1->type == OBJECT_TYPE_FUNCTION)
... ...
@@ -766,7 +749,6 @@ X          $$ = ((YR_OBJECT_ARRAY*) $1)->items->objects[0];
766 766
         yr_free($3);
767 767
 
768 768
         ERROR_IF(compiler->last_result != ERROR_SUCCESS);
769
-#endif
770 769
       }
771 770
     ;
772 771