Show a clearer error message when hex strings have uneven number of digits.

This commit is contained in:
Victor M. Alvarez
2020-11-12 09:48:07 +01:00
parent c454e983a1
commit bebdfed28c
5 changed files with 4974 additions and 4845 deletions
+3260 -3351
View File
File diff suppressed because it is too large Load Diff
+134 -133
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -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);