parser: Fix simple quote setvar in the end of the line.

Fix #1831
This commit is contained in:
Felipe Zimmerle
2018-09-11 15:30:09 -03:00
parent 738e328723
commit 764a2e43ff
8 changed files with 6520 additions and 6256 deletions

View File

@@ -1,8 +1,8 @@
// A Bison parser, made by GNU Bison 3.0.2.
// A Bison parser, made by GNU Bison 3.0.5.
// Skeleton interface for Bison LALR(1) parsers in C++
// Copyright (C) 2002-2013 Free Software Foundation, Inc.
// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -40,7 +40,7 @@
#ifndef YY_YY_SECLANG_PARSER_HH_INCLUDED
# define YY_YY_SECLANG_PARSER_HH_INCLUDED
// // "%code requires" blocks.
#line 10 "seclang-parser.yy" // lalr1.cc:372
#line 10 "seclang-parser.yy" // lalr1.cc:379
#include <string>
#include <iterator>
@@ -380,13 +380,14 @@ using modsecurity::operators::Operator;
#line 384 "seclang-parser.hh" // lalr1.cc:372
#line 384 "seclang-parser.hh" // lalr1.cc:379
# include <cassert>
# include <vector>
# include <cstdlib> // std::abort
# include <iostream>
# include <stdexcept>
# include <string>
# include <vector>
# include "stack.hh"
# include "location.hh"
#include <typeinfo>
@@ -456,7 +457,7 @@ using modsecurity::operators::Operator;
namespace yy {
#line 460 "seclang-parser.hh" // lalr1.cc:372
#line 461 "seclang-parser.hh" // lalr1.cc:379
@@ -473,13 +474,13 @@ namespace yy {
/// Empty construction.
variant ()
: yytname_ (YY_NULLPTR)
: yytypeid_ (YY_NULLPTR)
{}
/// Construct and fill.
template <typename T>
variant (const T& t)
: yytname_ (typeid (T).name ())
: yytypeid_ (&typeid (T))
{
YYASSERT (sizeof (T) <= S);
new (yyas_<T> ()) T (t);
@@ -488,7 +489,7 @@ namespace yy {
/// Destruction, allowed only if empty.
~variant ()
{
YYASSERT (!yytname_);
YYASSERT (!yytypeid_);
}
/// Instantiate an empty \a T in here.
@@ -496,9 +497,9 @@ namespace yy {
T&
build ()
{
YYASSERT (!yytname_);
YYASSERT (!yytypeid_);
YYASSERT (sizeof (T) <= S);
yytname_ = typeid (T).name ();
yytypeid_ = & typeid (T);
return *new (yyas_<T> ()) T;
}
@@ -507,9 +508,9 @@ namespace yy {
T&
build (const T& t)
{
YYASSERT (!yytname_);
YYASSERT (!yytypeid_);
YYASSERT (sizeof (T) <= S);
yytname_ = typeid (T).name ();
yytypeid_ = & typeid (T);
return *new (yyas_<T> ()) T (std::move((T&)t));
}
@@ -518,7 +519,7 @@ namespace yy {
T&
as ()
{
YYASSERT (yytname_ == typeid (T).name ());
YYASSERT (*yytypeid_ == typeid (T));
YYASSERT (sizeof (T) <= S);
return *yyas_<T> ();
}
@@ -528,7 +529,7 @@ namespace yy {
const T&
as () const
{
YYASSERT (yytname_ == typeid (T).name ());
YYASSERT (*yytypeid_ == typeid (T));
YYASSERT (sizeof (T) <= S);
return *yyas_<T> ();
}
@@ -545,8 +546,8 @@ namespace yy {
void
swap (self_type& other)
{
YYASSERT (yytname_);
YYASSERT (yytname_ == other.yytname_);
YYASSERT (yytypeid_);
YYASSERT (*yytypeid_ == *other.yytypeid_);
std::swap (as<T> (), other.as<T> ());
}
@@ -576,7 +577,7 @@ namespace yy {
destroy ()
{
as<T> ().~T ();
yytname_ = YY_NULLPTR;
yytypeid_ = YY_NULLPTR;
}
private:
@@ -611,7 +612,7 @@ namespace yy {
} yybuffer_;
/// Whether the content is built: if defined, the name of the stored type.
const char *yytname_;
const std::type_info *yytypeid_;
};
@@ -1206,9 +1207,12 @@ namespace yy {
/// (External) token type, as returned by yylex.
typedef token::yytokentype token_type;
/// Internal symbol number.
/// Symbol type: an internal symbol number.
typedef int symbol_number_type;
/// The symbol type number to denote an empty symbol.
enum { empty_symbol = -2 };
/// Internal symbol number for tokens (subsumed by symbol_number_type).
typedef unsigned short int token_number_type;
@@ -1254,8 +1258,15 @@ namespace yy {
const semantic_type& v,
const location_type& l);
/// Destroy the symbol.
~basic_symbol ();
/// Destroy contents, and record that is empty.
void clear ();
/// Whether empty.
bool empty () const;
/// Destructive move, \a s is emptied into this.
void move (basic_symbol& s);
@@ -1285,21 +1296,23 @@ namespace yy {
/// Constructor from (external) token numbers.
by_type (kind_type t);
/// Record that this symbol is empty.
void clear ();
/// Steal the symbol type from \a that.
void move (by_type& that);
/// The (internal) type number (corresponding to \a type).
/// -1 when this symbol is empty.
/// \a empty when empty.
symbol_number_type type_get () const;
/// The token.
token_type token () const;
enum { empty = 0 };
/// The symbol type.
/// -1 when this symbol is empty.
token_number_type type;
/// \a empty_symbol when empty.
/// An int, not token_number_type, to be able to store empty_symbol.
int type;
};
/// "External" symbols: returned by the scanner.
@@ -2695,9 +2708,9 @@ namespace yy {
/// Generate an error message.
/// \param yystate the state where the error occurred.
/// \param yytoken the lookahead token type, or yyempty_.
/// \param yyla the lookahead token.
virtual std::string yysyntax_error_ (state_type yystate,
symbol_number_type yytoken) const;
const symbol_type& yyla) const;
/// Compute post-reduction state.
/// \param yystate the current state
@@ -2800,16 +2813,21 @@ namespace yy {
/// Copy constructor.
by_state (const by_state& other);
/// Record that this symbol is empty.
void clear ();
/// Steal the symbol type from \a that.
void move (by_state& that);
/// The (internal) type number (corresponding to \a state).
/// "empty" when empty.
/// \a empty_symbol when empty.
symbol_number_type type_get () const;
enum { empty = 0 };
/// The state number used to denote an empty symbol.
enum { empty_state = -1 };
/// The state.
/// \a empty when empty.
state_type state;
};
@@ -2820,6 +2838,8 @@ namespace yy {
typedef basic_symbol<by_state> super_type;
/// Construct an empty symbol.
stack_symbol_type ();
/// Copy construct.
stack_symbol_type (const stack_symbol_type& that);
/// Steal the contents from \a sym to build this.
stack_symbol_type (state_type s, symbol_type& sym);
/// Assignment, needed by push_back.
@@ -2848,15 +2868,14 @@ namespace yy {
void yypush_ (const char* m, state_type s, symbol_type& sym);
/// Pop \a n symbols the three stacks.
void yypop_ (unsigned int n = 1);
void yypop_ (unsigned n = 1);
// Constants.
/// Constants.
enum
{
yyeof_ = 0,
yylast_ = 3319, ///< Last index in yytable_.
yynnts_ = 15, ///< Number of nonterminal symbols.
yyempty_ = -2,
yyfinal_ = 335, ///< Termination state number.
yyterror_ = 1,
yyerrcode_ = 256,
@@ -2938,12 +2957,12 @@ namespace yy {
325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
335, 336, 337, 338
};
const unsigned int user_token_number_max_ = 593;
const unsigned user_token_number_max_ = 593;
const token_number_type undef_token_ = 2;
if (static_cast<int>(t) <= yyeof_)
if (static_cast<int> (t) <= yyeof_)
return yyeof_;
else if (static_cast<unsigned int> (t) <= user_token_number_max_)
else if (static_cast<unsigned> (t) <= user_token_number_max_)
return translate_table[t];
else
return undef_token_;
@@ -2957,19 +2976,17 @@ namespace yy {
// basic_symbol.
template <typename Base>
inline
seclang_parser::basic_symbol<Base>::basic_symbol ()
: value ()
{}
template <typename Base>
inline
seclang_parser::basic_symbol<Base>::basic_symbol (const basic_symbol& other)
: Base (other)
, value ()
, location (other.location)
{
switch (other.type_get ())
switch (other.type_get ())
{
case 144: // "Accuracy"
case 145: // "Allow"
@@ -3203,16 +3220,14 @@ namespace yy {
}
template <typename Base>
inline
seclang_parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const semantic_type& v, const location_type& l)
: Base (t)
, value ()
, location (l)
{
(void) v;
switch (this->type_get ())
switch (this->type_get ())
{
case 144: // "Accuracy"
case 145: // "Allow"
@@ -3506,11 +3521,19 @@ namespace yy {
template <typename Base>
inline
seclang_parser::basic_symbol<Base>::~basic_symbol ()
{
clear ();
}
template <typename Base>
void
seclang_parser::basic_symbol<Base>::clear ()
{
// User destructor.
symbol_number_type yytype = this->type_get ();
basic_symbol<Base>& yysym = *this;
(void) yysym;
switch (yytype)
{
default:
@@ -3518,7 +3541,7 @@ namespace yy {
}
// Type destructor.
switch (yytype)
switch (yytype)
{
case 144: // "Accuracy"
case 145: // "Allow"
@@ -3750,15 +3773,22 @@ namespace yy {
break;
}
Base::clear ();
}
template <typename Base>
bool
seclang_parser::basic_symbol<Base>::empty () const
{
return Base::type_get () == empty_symbol;
}
template <typename Base>
inline
void
seclang_parser::basic_symbol<Base>::move (basic_symbol& s)
{
super_type::move(s);
switch (this->type_get ())
super_type::move (s);
switch (this->type_get ())
{
case 144: // "Accuracy"
case 145: // "Allow"
@@ -3996,7 +4026,7 @@ namespace yy {
// by_type.
inline
seclang_parser::by_type::by_type ()
: type (empty)
: type (empty_symbol)
{}
inline
@@ -4009,12 +4039,19 @@ namespace yy {
: type (yytranslate_ (t))
{}
inline
void
seclang_parser::by_type::clear ()
{
type = empty_symbol;
}
inline
void
seclang_parser::by_type::move (by_type& that)
{
type = that.type;
that.type = empty;
that.clear ();
}
inline
@@ -6097,7 +6134,7 @@ namespace yy {
} // yy
#line 6101 "seclang-parser.hh" // lalr1.cc:372
#line 6138 "seclang-parser.hh" // lalr1.cc:379