mirror of
https://github.com/VirusTotal/yara.git
synced 2026-10-12 02:10:00 +00:00
Show a clearer error message when hex strings have uneven number of digits.
This commit is contained in:
+3260
-3351
File diff suppressed because it is too large
Load Diff
+134
-133
@@ -31,10 +31,10 @@
|
||||
version 2.2 of Bison. */
|
||||
|
||||
#ifndef YY_YARA_YY_GRAMMAR_H_INCLUDED
|
||||
#define YY_YARA_YY_GRAMMAR_H_INCLUDED
|
||||
# define YY_YARA_YY_GRAMMAR_H_INCLUDED
|
||||
/* Debug traces. */
|
||||
#ifndef YYDEBUG
|
||||
#define YYDEBUG 0
|
||||
# define YYDEBUG 0
|
||||
#endif
|
||||
#if YYDEBUG
|
||||
extern int yara_yydebug;
|
||||
@@ -42,144 +42,144 @@ extern int yara_yydebug;
|
||||
|
||||
/* Token type. */
|
||||
#ifndef YYTOKENTYPE
|
||||
#define YYTOKENTYPE
|
||||
enum yytokentype
|
||||
{
|
||||
_END_OF_FILE_ = 0,
|
||||
_END_OF_INCLUDED_FILE_ = 258,
|
||||
_DOT_DOT_ = 259,
|
||||
_RULE_ = 260,
|
||||
_PRIVATE_ = 261,
|
||||
_GLOBAL_ = 262,
|
||||
_META_ = 263,
|
||||
_STRINGS_ = 264,
|
||||
_CONDITION_ = 265,
|
||||
_IDENTIFIER_ = 266,
|
||||
_STRING_IDENTIFIER_ = 267,
|
||||
_STRING_COUNT_ = 268,
|
||||
_STRING_OFFSET_ = 269,
|
||||
_STRING_LENGTH_ = 270,
|
||||
_STRING_IDENTIFIER_WITH_WILDCARD_ = 271,
|
||||
_NUMBER_ = 272,
|
||||
_DOUBLE_ = 273,
|
||||
_INTEGER_FUNCTION_ = 274,
|
||||
_TEXT_STRING_ = 275,
|
||||
_HEX_STRING_ = 276,
|
||||
_REGEXP_ = 277,
|
||||
_ASCII_ = 278,
|
||||
_WIDE_ = 279,
|
||||
_XOR_ = 280,
|
||||
_BASE64_ = 281,
|
||||
_BASE64_WIDE_ = 282,
|
||||
_NOCASE_ = 283,
|
||||
_FULLWORD_ = 284,
|
||||
_AT_ = 285,
|
||||
_FILESIZE_ = 286,
|
||||
_ENTRYPOINT_ = 287,
|
||||
_ALL_ = 288,
|
||||
_ANY_ = 289,
|
||||
_IN_ = 290,
|
||||
_OF_ = 291,
|
||||
_FOR_ = 292,
|
||||
_THEM_ = 293,
|
||||
_MATCHES_ = 294,
|
||||
_CONTAINS_ = 295,
|
||||
_STARTSWITH_ = 296,
|
||||
_ENDSWITH_ = 297,
|
||||
_ICONTAINS_ = 298,
|
||||
_ISTARTSWITH_ = 299,
|
||||
_IENDSWITH_ = 300,
|
||||
_IMPORT_ = 301,
|
||||
_TRUE_ = 302,
|
||||
_FALSE_ = 303,
|
||||
_OR_ = 304,
|
||||
_AND_ = 305,
|
||||
_NOT_ = 306,
|
||||
_EQ_ = 307,
|
||||
_NEQ_ = 308,
|
||||
_LT_ = 309,
|
||||
_LE_ = 310,
|
||||
_GT_ = 311,
|
||||
_GE_ = 312,
|
||||
_SHIFT_LEFT_ = 313,
|
||||
_SHIFT_RIGHT_ = 314,
|
||||
UNARY_MINUS = 315
|
||||
};
|
||||
# define YYTOKENTYPE
|
||||
enum yytokentype
|
||||
{
|
||||
_END_OF_FILE_ = 0,
|
||||
_END_OF_INCLUDED_FILE_ = 258,
|
||||
_DOT_DOT_ = 259,
|
||||
_RULE_ = 260,
|
||||
_PRIVATE_ = 261,
|
||||
_GLOBAL_ = 262,
|
||||
_META_ = 263,
|
||||
_STRINGS_ = 264,
|
||||
_CONDITION_ = 265,
|
||||
_IDENTIFIER_ = 266,
|
||||
_STRING_IDENTIFIER_ = 267,
|
||||
_STRING_COUNT_ = 268,
|
||||
_STRING_OFFSET_ = 269,
|
||||
_STRING_LENGTH_ = 270,
|
||||
_STRING_IDENTIFIER_WITH_WILDCARD_ = 271,
|
||||
_NUMBER_ = 272,
|
||||
_DOUBLE_ = 273,
|
||||
_INTEGER_FUNCTION_ = 274,
|
||||
_TEXT_STRING_ = 275,
|
||||
_HEX_STRING_ = 276,
|
||||
_REGEXP_ = 277,
|
||||
_ASCII_ = 278,
|
||||
_WIDE_ = 279,
|
||||
_XOR_ = 280,
|
||||
_BASE64_ = 281,
|
||||
_BASE64_WIDE_ = 282,
|
||||
_NOCASE_ = 283,
|
||||
_FULLWORD_ = 284,
|
||||
_AT_ = 285,
|
||||
_FILESIZE_ = 286,
|
||||
_ENTRYPOINT_ = 287,
|
||||
_ALL_ = 288,
|
||||
_ANY_ = 289,
|
||||
_IN_ = 290,
|
||||
_OF_ = 291,
|
||||
_FOR_ = 292,
|
||||
_THEM_ = 293,
|
||||
_MATCHES_ = 294,
|
||||
_CONTAINS_ = 295,
|
||||
_STARTSWITH_ = 296,
|
||||
_ENDSWITH_ = 297,
|
||||
_ICONTAINS_ = 298,
|
||||
_ISTARTSWITH_ = 299,
|
||||
_IENDSWITH_ = 300,
|
||||
_IMPORT_ = 301,
|
||||
_TRUE_ = 302,
|
||||
_FALSE_ = 303,
|
||||
_OR_ = 304,
|
||||
_AND_ = 305,
|
||||
_NOT_ = 306,
|
||||
_EQ_ = 307,
|
||||
_NEQ_ = 308,
|
||||
_LT_ = 309,
|
||||
_LE_ = 310,
|
||||
_GT_ = 311,
|
||||
_GE_ = 312,
|
||||
_SHIFT_LEFT_ = 313,
|
||||
_SHIFT_RIGHT_ = 314,
|
||||
UNARY_MINUS = 315
|
||||
};
|
||||
#endif
|
||||
/* Tokens. */
|
||||
#define _END_OF_FILE_ 0
|
||||
#define _END_OF_INCLUDED_FILE_ 258
|
||||
#define _DOT_DOT_ 259
|
||||
#define _RULE_ 260
|
||||
#define _PRIVATE_ 261
|
||||
#define _GLOBAL_ 262
|
||||
#define _META_ 263
|
||||
#define _STRINGS_ 264
|
||||
#define _CONDITION_ 265
|
||||
#define _IDENTIFIER_ 266
|
||||
#define _STRING_IDENTIFIER_ 267
|
||||
#define _STRING_COUNT_ 268
|
||||
#define _STRING_OFFSET_ 269
|
||||
#define _STRING_LENGTH_ 270
|
||||
#define _END_OF_FILE_ 0
|
||||
#define _END_OF_INCLUDED_FILE_ 258
|
||||
#define _DOT_DOT_ 259
|
||||
#define _RULE_ 260
|
||||
#define _PRIVATE_ 261
|
||||
#define _GLOBAL_ 262
|
||||
#define _META_ 263
|
||||
#define _STRINGS_ 264
|
||||
#define _CONDITION_ 265
|
||||
#define _IDENTIFIER_ 266
|
||||
#define _STRING_IDENTIFIER_ 267
|
||||
#define _STRING_COUNT_ 268
|
||||
#define _STRING_OFFSET_ 269
|
||||
#define _STRING_LENGTH_ 270
|
||||
#define _STRING_IDENTIFIER_WITH_WILDCARD_ 271
|
||||
#define _NUMBER_ 272
|
||||
#define _DOUBLE_ 273
|
||||
#define _INTEGER_FUNCTION_ 274
|
||||
#define _TEXT_STRING_ 275
|
||||
#define _HEX_STRING_ 276
|
||||
#define _REGEXP_ 277
|
||||
#define _ASCII_ 278
|
||||
#define _WIDE_ 279
|
||||
#define _XOR_ 280
|
||||
#define _BASE64_ 281
|
||||
#define _BASE64_WIDE_ 282
|
||||
#define _NOCASE_ 283
|
||||
#define _FULLWORD_ 284
|
||||
#define _AT_ 285
|
||||
#define _FILESIZE_ 286
|
||||
#define _ENTRYPOINT_ 287
|
||||
#define _ALL_ 288
|
||||
#define _ANY_ 289
|
||||
#define _IN_ 290
|
||||
#define _OF_ 291
|
||||
#define _FOR_ 292
|
||||
#define _THEM_ 293
|
||||
#define _MATCHES_ 294
|
||||
#define _CONTAINS_ 295
|
||||
#define _STARTSWITH_ 296
|
||||
#define _ENDSWITH_ 297
|
||||
#define _ICONTAINS_ 298
|
||||
#define _ISTARTSWITH_ 299
|
||||
#define _IENDSWITH_ 300
|
||||
#define _IMPORT_ 301
|
||||
#define _TRUE_ 302
|
||||
#define _FALSE_ 303
|
||||
#define _OR_ 304
|
||||
#define _AND_ 305
|
||||
#define _NOT_ 306
|
||||
#define _EQ_ 307
|
||||
#define _NEQ_ 308
|
||||
#define _LT_ 309
|
||||
#define _LE_ 310
|
||||
#define _GT_ 311
|
||||
#define _GE_ 312
|
||||
#define _SHIFT_LEFT_ 313
|
||||
#define _SHIFT_RIGHT_ 314
|
||||
#define UNARY_MINUS 315
|
||||
#define _NUMBER_ 272
|
||||
#define _DOUBLE_ 273
|
||||
#define _INTEGER_FUNCTION_ 274
|
||||
#define _TEXT_STRING_ 275
|
||||
#define _HEX_STRING_ 276
|
||||
#define _REGEXP_ 277
|
||||
#define _ASCII_ 278
|
||||
#define _WIDE_ 279
|
||||
#define _XOR_ 280
|
||||
#define _BASE64_ 281
|
||||
#define _BASE64_WIDE_ 282
|
||||
#define _NOCASE_ 283
|
||||
#define _FULLWORD_ 284
|
||||
#define _AT_ 285
|
||||
#define _FILESIZE_ 286
|
||||
#define _ENTRYPOINT_ 287
|
||||
#define _ALL_ 288
|
||||
#define _ANY_ 289
|
||||
#define _IN_ 290
|
||||
#define _OF_ 291
|
||||
#define _FOR_ 292
|
||||
#define _THEM_ 293
|
||||
#define _MATCHES_ 294
|
||||
#define _CONTAINS_ 295
|
||||
#define _STARTSWITH_ 296
|
||||
#define _ENDSWITH_ 297
|
||||
#define _ICONTAINS_ 298
|
||||
#define _ISTARTSWITH_ 299
|
||||
#define _IENDSWITH_ 300
|
||||
#define _IMPORT_ 301
|
||||
#define _TRUE_ 302
|
||||
#define _FALSE_ 303
|
||||
#define _OR_ 304
|
||||
#define _AND_ 305
|
||||
#define _NOT_ 306
|
||||
#define _EQ_ 307
|
||||
#define _NEQ_ 308
|
||||
#define _LT_ 309
|
||||
#define _LE_ 310
|
||||
#define _GT_ 311
|
||||
#define _GE_ 312
|
||||
#define _SHIFT_LEFT_ 313
|
||||
#define _SHIFT_RIGHT_ 314
|
||||
#define UNARY_MINUS 315
|
||||
|
||||
/* Value type. */
|
||||
#if !defined YYSTYPE && !defined YYSTYPE_IS_DECLARED
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
|
||||
union YYSTYPE
|
||||
{
|
||||
#line 302 "grammar.y" /* yacc.c:1916 */
|
||||
|
||||
YR_EXPRESSION expression;
|
||||
SIZED_STRING* sized_string;
|
||||
char* c_string;
|
||||
int64_t integer;
|
||||
double double_;
|
||||
YR_MODIFIER modifier;
|
||||
YR_EXPRESSION expression;
|
||||
SIZED_STRING* sized_string;
|
||||
char* c_string;
|
||||
int64_t integer;
|
||||
double double_;
|
||||
YR_MODIFIER modifier;
|
||||
|
||||
YR_ARENA_REF tag;
|
||||
YR_ARENA_REF rule;
|
||||
@@ -190,11 +190,12 @@ union YYSTYPE
|
||||
};
|
||||
|
||||
typedef union YYSTYPE YYSTYPE;
|
||||
#define YYSTYPE_IS_TRIVIAL 1
|
||||
#define YYSTYPE_IS_DECLARED 1
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
#endif
|
||||
|
||||
|
||||
int yara_yyparse(void* yyscanner, YR_COMPILER* compiler);
|
||||
|
||||
int yara_yyparse (void *yyscanner, YR_COMPILER* compiler);
|
||||
|
||||
#endif /* !YY_YARA_YY_GRAMMAR_H_INCLUDED */
|
||||
|
||||
+2
-5
@@ -1405,8 +1405,6 @@ expression
|
||||
}
|
||||
| _FOR_ for_expression error
|
||||
{
|
||||
int i;
|
||||
|
||||
// Free all the loop variable identifiers, including the variables for
|
||||
// the current loop (represented by loop_index), and set loop_index to
|
||||
// -1. This is OK even if we have nested loops. If an error occurs while
|
||||
@@ -1414,7 +1412,7 @@ expression
|
||||
// anyways, so it's safe to do this cleanup while processing the error
|
||||
// for the inner loop.
|
||||
|
||||
for (i = 0; i <= compiler->loop_index; i++)
|
||||
for (int i = 0; i <= compiler->loop_index; i++)
|
||||
{
|
||||
loop_vars_cleanup(i);
|
||||
}
|
||||
@@ -1528,7 +1526,6 @@ expression
|
||||
YR_ARENA_REF jmp_offset_ref;
|
||||
|
||||
int var_frame = _yr_compiler_get_var_frame(compiler);
|
||||
int i;
|
||||
|
||||
fail_if_error(yr_parser_emit(
|
||||
yyscanner, OP_ITER_NEXT, &loop_start_ref));
|
||||
@@ -1538,7 +1535,7 @@ expression
|
||||
// YR_INTERNAL_LOOP_VARS because the first YR_INTERNAL_LOOP_VARS slots
|
||||
// in the frame are for the internal variables.
|
||||
|
||||
for (i = 0; i < loop_ctx->vars_count; i++)
|
||||
for (int i = 0; i < loop_ctx->vars_count; i++)
|
||||
{
|
||||
fail_if_error(yr_parser_emit_with_arg(
|
||||
yyscanner,
|
||||
|
||||
+1572
-1356
File diff suppressed because it is too large
Load Diff
@@ -121,6 +121,12 @@ hexdigit [a-fA-F0-9]
|
||||
return _MASKED_BYTE_;
|
||||
}
|
||||
|
||||
{hexdigit} {
|
||||
|
||||
yyerror(yyscanner, lex_env, "uneven number of digits in hex string");
|
||||
yyterminate();
|
||||
}
|
||||
|
||||
\[ {
|
||||
|
||||
BEGIN(range);
|
||||
|
||||
Reference in New Issue
Block a user