]> granicus.if.org Git - apache/commitdiff
Update auto-generated code
authorStefan Fritsch <sf@apache.org>
Sat, 13 Aug 2011 10:00:45 +0000 (10:00 +0000)
committerStefan Fritsch <sf@apache.org>
Sat, 13 Aug 2011 10:00:45 +0000 (10:00 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1157363 13f79535-47bb-0310-9956-ffa450edef68

server/util_expr_parse.c
server/util_expr_scan.c

index 6e74cf79ac0d6bbf9a3b7178d36fc3e5a90a163f..7bf00fa0176bd1330d893cd3227e70b0f9cbe3c5 100644 (file)
@@ -397,18 +397,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  26
+#define YYFINAL  27
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   122
+#define YYLAST   120
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  45
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  14
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  51
+#define YYNRULES  52
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  94
+#define YYNSTATES  95
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -460,9 +460,9 @@ static const yytype_uint8 yyprhs[] =
        0,     0,     3,     6,     9,    11,    13,    15,    18,    22,
       26,    28,    31,    35,    39,    43,    47,    51,    55,    59,
       63,    67,    71,    75,    79,    83,    87,    91,    95,    99,
-     101,   105,   107,   111,   114,   116,   118,   120,   122,   126,
-     132,   134,   138,   140,   142,   144,   148,   151,   153,   155,
-     157,   162
+     101,   105,   107,   111,   114,   116,   118,   120,   122,   124,
+     128,   134,   136,   140,   142,   144,   146,   150,   153,   155,
+     157,   159,   164
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -479,12 +479,12 @@ static const yytype_int8 yyrhs[] =
       33,    54,    -1,    54,    34,    54,    -1,    54,    28,    49,
       -1,    54,    26,    55,    -1,    54,    27,    55,    -1,    57,
       -1,    41,    50,    42,    -1,    54,    -1,    50,    43,    54,
-      -1,    51,    52,    -1,    52,    -1,    10,    -1,    53,    -1,
-      56,    -1,    18,     9,    19,    -1,    18,     9,    44,    51,
-      19,    -1,     8,    -1,    54,    35,    54,    -1,    53,    -1,
-      56,    -1,    58,    -1,    16,    51,    17,    -1,    16,    17,
-      -1,    11,    -1,    12,    -1,    13,    -1,     9,    39,    54,
-      40,    -1,     9,    39,    54,    40,    -1
+      -1,    51,    52,    -1,    52,    -1,     7,    -1,    10,    -1,
+      53,    -1,    56,    -1,    18,     9,    19,    -1,    18,     9,
+      44,    51,    19,    -1,     8,    -1,    54,    35,    54,    -1,
+      53,    -1,    56,    -1,    58,    -1,    16,    51,    17,    -1,
+      16,    17,    -1,    11,    -1,    12,    -1,    13,    -1,     9,
+      39,    54,    40,    -1,     9,    39,    54,    40,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -493,9 +493,9 @@ static const yytype_uint8 yyrline[] =
        0,   112,   112,   113,   114,   117,   118,   119,   120,   121,
      122,   123,   124,   125,   128,   129,   130,   131,   132,   133,
      134,   135,   136,   137,   138,   139,   140,   141,   142,   145,
-     146,   149,   150,   153,   154,   157,   158,   159,   162,   163,
-     166,   167,   168,   169,   170,   171,   172,   175,   184,   195,
-     202,   205
+     146,   149,   150,   153,   154,   155,   158,   159,   160,   163,
+     164,   167,   168,   169,   170,   171,   172,   173,   176,   185,
+     196,   203,   206
 };
 #endif
 
@@ -537,9 +537,9 @@ static const yytype_uint8 yyr1[] =
        0,    45,    46,    46,    46,    47,    47,    47,    47,    47,
       47,    47,    47,    47,    48,    48,    48,    48,    48,    48,
       48,    48,    48,    48,    48,    48,    48,    48,    48,    49,
-      49,    50,    50,    51,    51,    52,    52,    52,    53,    53,
-      54,    54,    54,    54,    54,    54,    54,    55,    55,    56,
-      57,    58
+      49,    50,    50,    51,    51,    51,    52,    52,    52,    53,
+      53,    54,    54,    54,    54,    54,    54,    54,    55,    55,
+      56,    57,    58
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -548,9 +548,9 @@ static const yytype_uint8 yyr2[] =
        0,     2,     2,     2,     1,     1,     1,     2,     3,     3,
        1,     2,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
-       3,     1,     3,     2,     1,     1,     1,     1,     3,     5,
-       1,     3,     1,     1,     1,     3,     2,     1,     1,     1,
-       4,     4
+       3,     1,     3,     2,     1,     1,     1,     1,     1,     3,
+       5,     1,     3,     1,     1,     1,     3,     2,     1,     1,
+       1,     4,     4
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -558,47 +558,47 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,     0,     4,     0,     5,     6,    40,     0,    49,
-       0,     0,     0,     0,     0,     2,    10,    42,     0,    43,
-      44,    35,     3,    34,    36,    37,     1,     0,    11,    46,
-       0,     0,     7,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     4,     0,     5,     6,    41,     0,    50,
+       0,     0,     0,     0,     0,     2,    10,    43,     0,    44,
+      45,    35,    36,     3,    34,    37,    38,     1,     0,    11,
+      47,     0,     0,     7,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,    45,    38,     0,    13,     8,
-       9,    12,    14,    15,    16,    17,    18,    19,    47,    48,
-      27,    28,     0,     0,    26,    29,    20,    21,    22,    23,
-      24,    25,    41,    51,     0,     0,     0,    31,    39,     0,
-      30,     0,    50,    32
+       0,     0,     0,     0,    33,     0,    46,    39,     0,    13,
+       8,     9,    12,    14,    15,    16,    17,    18,    19,    48,
+      49,    27,    28,     0,     0,    26,    29,    20,    21,    22,
+      23,    24,    25,    42,    52,     0,     0,     0,    31,    40,
+       0,    30,     0,    51,    32
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     4,    15,    16,    74,    86,    22,    23,    17,    18,
-      70,    19,    75,    20
+      -1,     4,    15,    16,    75,    87,    23,    24,    17,    18,
+      71,    19,    76,    20
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -26
+#define YYPACT_NINF -22
 static const yytype_int8 yypact[] =
 {
-     113,    58,    41,   -26,     8,   -26,   -26,   -26,     0,   -26,
-      76,     6,     5,    58,    58,    51,   -26,   -26,    78,   -26,
-     -26,   -26,    41,   -26,   -26,   -26,   -26,    76,    17,   -26,
-     104,    -4,   -26,    13,    58,    58,    76,    76,    76,    76,
-      76,    76,    76,    15,    15,    -3,    76,    76,    76,    76,
-      76,    76,    76,   -26,   -10,   -26,   -26,    41,   -26,    23,
-     -26,    17,    17,    17,    17,    17,    17,    17,   -26,   -26,
-     -26,   -26,    24,    76,   -26,   -26,    17,    17,    17,    17,
-      17,    17,   -26,   -26,    -6,    76,   -25,    17,   -26,    29,
-     -26,    76,   -26,    17
+      21,    50,    60,   -22,     8,   -22,   -22,   -22,     2,   -22,
+      98,     7,    65,    50,    50,    81,   -22,   -22,    70,   -22,
+     -22,   -22,   -22,    42,   -22,   -22,   -22,   -22,    98,    16,
+     -22,    62,   -13,   -22,   -21,    50,    50,    98,    98,    98,
+      98,    98,    98,    98,   108,   108,     9,    98,    98,    98,
+      98,    98,    98,    98,   -22,    36,   -22,   -22,    60,   -22,
+      40,   -22,    16,    16,    16,    16,    16,    16,    16,   -22,
+     -22,   -22,   -22,    43,    98,   -22,   -22,    16,    16,    16,
+      16,    16,    16,   -22,   -22,    -6,    98,    67,    16,   -22,
+      73,   -22,    98,   -22,    16
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -26,   -26,    44,   -26,   -26,   -26,    -9,   -19,    -2,    -5,
-      26,    -1,   -26,   -26
+     -22,   -22,    26,   -22,   -22,   -22,    -9,   -20,    -2,    -5,
+      41,    -1,   -22,   -22
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -608,36 +608,36 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint8 yytable[] =
 {
-      24,    25,    30,    53,    21,    28,    72,     9,    26,    24,
-      25,    53,    12,    88,    31,    56,    21,    90,    91,     9,
-      24,    25,    54,    29,    12,    52,    68,    69,    24,    25,
-      83,    61,    62,    63,    64,    65,    66,    67,    73,    27,
-      57,    76,    77,    78,    79,    80,    81,    82,    84,    34,
-      35,    21,    52,    58,     9,    24,    25,    32,    33,    12,
-      35,     5,     6,    85,    52,    53,     7,     8,    87,    92,
-      71,     9,    10,     0,    11,     0,    12,     0,    59,    60,
-      89,     0,    24,    25,     7,     8,    93,    34,    35,     9,
-       0,     0,    11,    36,    12,     0,    13,    14,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    21,     0,     0,     9,     1,     2,
-       3,    55,    12
+      25,    26,    31,    54,    22,    29,    57,     9,    27,    25,
+      26,    54,    12,    89,    21,    35,    36,    22,    73,    59,
+       9,    25,    26,    55,    30,    12,     1,     2,     3,    25,
+      26,    58,    62,    63,    64,    65,    66,    67,    68,    33,
+      34,    28,    77,    78,    79,    80,    81,    82,    83,    85,
+      74,    53,    22,     5,     6,     9,    25,    26,     7,     8,
+      12,    60,    61,     9,    10,    54,    11,    21,    12,    88,
+      22,    53,    22,     9,    32,     9,    84,    36,    12,    56,
+      12,    90,    86,    25,    26,    37,    72,    94,    13,    14,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,     7,     8,    53,    91,
+      92,     9,     0,    93,    11,     0,    12,    35,    36,    69,
+      70
 };
 
 static const yytype_int8 yycheck[] =
 {
-       2,     2,    11,    22,    10,    10,     9,    13,     0,    11,
-      11,    30,    18,    19,     9,    19,    10,    42,    43,    13,
-      22,    22,    27,    17,    18,    35,    11,    12,    30,    30,
-      40,    36,    37,    38,    39,    40,    41,    42,    41,    39,
-      44,    46,    47,    48,    49,    50,    51,    52,    57,    36,
-      37,    10,    35,    40,    13,    57,    57,    13,    14,    18,
-      37,     3,     4,    39,    35,    84,     8,     9,    73,    40,
-      44,    13,    14,    -1,    16,    -1,    18,    -1,    34,    35,
-      85,    -1,    84,    84,     8,     9,    91,    36,    37,    13,
-      -1,    -1,    16,    15,    18,    -1,    38,    39,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    10,    -1,    -1,    13,     5,     6,
-       7,    17,    18
+       2,     2,    11,    23,    10,    10,    19,    13,     0,    11,
+      11,    31,    18,    19,     7,    36,    37,    10,     9,    40,
+      13,    23,    23,    28,    17,    18,     5,     6,     7,    31,
+      31,    44,    37,    38,    39,    40,    41,    42,    43,    13,
+      14,    39,    47,    48,    49,    50,    51,    52,    53,    58,
+      41,    35,    10,     3,     4,    13,    58,    58,     8,     9,
+      18,    35,    36,    13,    14,    85,    16,     7,    18,    74,
+      10,    35,    10,    13,     9,    13,    40,    37,    18,    17,
+      18,    86,    39,    85,    85,    15,    45,    92,    38,    39,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,     8,     9,    35,    42,
+      43,    13,    -1,    40,    16,    -1,    18,    36,    37,    11,
+      12
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -646,14 +646,14 @@ static const yytype_uint8 yystos[] =
 {
        0,     5,     6,     7,    46,     3,     4,     8,     9,    13,
       14,    16,    18,    38,    39,    47,    48,    53,    54,    56,
-      58,    10,    51,    52,    53,    56,     0,    39,    54,    17,
-      51,     9,    47,    47,    36,    37,    15,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    52,    54,    17,    19,    44,    40,    47,
-      47,    54,    54,    54,    54,    54,    54,    54,    11,    12,
-      55,    55,     9,    41,    49,    57,    54,    54,    54,    54,
-      54,    54,    54,    40,    51,    39,    50,    54,    19,    54,
-      42,    43,    40,    54
+      58,     7,    10,    51,    52,    53,    56,     0,    39,    54,
+      17,    51,     9,    47,    47,    36,    37,    15,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    52,    54,    17,    19,    44,    40,
+      47,    47,    54,    54,    54,    54,    54,    54,    54,    11,
+      12,    55,    55,     9,    41,    49,    57,    54,    54,    54,
+      54,    54,    54,    54,    40,    51,    39,    50,    54,    19,
+      54,    42,    43,    40,    54
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1703,15 +1703,15 @@ yyreduce:
   case 35:
 
 /* Line 1455 of yacc.c  */
-#line 157 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_String, (yyvsp[(1) - (1)].cpVal), NULL, ctx); ;}
+#line 155 "util_expr_parse.y"
+    { YYABORT; ;}
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
 #line 158 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); ;}
+    { (yyval.exVal) = ap_expr_make(op_String, (yyvsp[(1) - (1)].cpVal), NULL, ctx); ;}
     break;
 
   case 37:
@@ -1724,36 +1724,36 @@ yyreduce:
   case 38:
 
 /* Line 1455 of yacc.c  */
-#line 162 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_var_make((yyvsp[(2) - (3)].cpVal), ctx); ;}
+#line 160 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); ;}
     break;
 
   case 39:
 
 /* Line 1455 of yacc.c  */
 #line 163 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(2) - (5)].cpVal), (yyvsp[(4) - (5)].exVal), ctx); ;}
+    { (yyval.exVal) = ap_expr_var_make((yyvsp[(2) - (3)].cpVal), ctx); ;}
     break;
 
   case 40:
 
 /* Line 1455 of yacc.c  */
-#line 166 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_Digit,  (yyvsp[(1) - (1)].cpVal), NULL, ctx); ;}
+#line 164 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(2) - (5)].cpVal), (yyvsp[(4) - (5)].exVal), ctx); ;}
     break;
 
   case 41:
 
 /* Line 1455 of yacc.c  */
 #line 167 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_Concat, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal),   ctx); ;}
+    { (yyval.exVal) = ap_expr_make(op_Digit,  (yyvsp[(1) - (1)].cpVal), NULL, ctx); ;}
     break;
 
   case 42:
 
 /* Line 1455 of yacc.c  */
 #line 168 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); ;}
+    { (yyval.exVal) = ap_expr_make(op_Concat, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal),   ctx); ;}
     break;
 
   case 43:
@@ -1774,20 +1774,27 @@ yyreduce:
 
 /* Line 1455 of yacc.c  */
 #line 171 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); ;}
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); ;}
     break;
 
   case 46:
 
 /* Line 1455 of yacc.c  */
 #line 172 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_String, "", NULL, ctx); ;}
+    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); ;}
     break;
 
   case 47:
 
 /* Line 1455 of yacc.c  */
-#line 175 "util_expr_parse.y"
+#line 173 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_String, "", NULL, ctx); ;}
+    break;
+
+  case 48:
+
+/* Line 1455 of yacc.c  */
+#line 176 "util_expr_parse.y"
     {
                 ap_regex_t *regex;
                 if ((regex = ap_pregcomp(ctx->pool, (yyvsp[(1) - (1)].cpVal),
@@ -1799,10 +1806,10 @@ yyreduce:
             ;}
     break;
 
-  case 48:
+  case 49:
 
 /* Line 1455 of yacc.c  */
-#line 184 "util_expr_parse.y"
+#line 185 "util_expr_parse.y"
     {
                 ap_regex_t *regex;
                 if ((regex = ap_pregcomp(ctx->pool, (yyvsp[(1) - (1)].cpVal),
@@ -1814,10 +1821,10 @@ yyreduce:
             ;}
     break;
 
-  case 49:
+  case 50:
 
 /* Line 1455 of yacc.c  */
-#line 195 "util_expr_parse.y"
+#line 196 "util_expr_parse.y"
     {
                 int *n = apr_palloc(ctx->pool, sizeof(int));
                 *n = (yyvsp[(1) - (1)].num);
@@ -1825,24 +1832,24 @@ yyreduce:
             ;}
     break;
 
-  case 50:
+  case 51:
 
 /* Line 1455 of yacc.c  */
-#line 202 "util_expr_parse.y"
+#line 203 "util_expr_parse.y"
     { (yyval.exVal) = ap_expr_list_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); ;}
     break;
 
-  case 51:
+  case 52:
 
 /* Line 1455 of yacc.c  */
-#line 205 "util_expr_parse.y"
+#line 206 "util_expr_parse.y"
     { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); ;}
     break;
 
 
 
 /* Line 1455 of yacc.c  */
-#line 1846 "util_expr_parse.c"
+#line 1853 "util_expr_parse.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2054,7 +2061,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 208 "util_expr_parse.y"
+#line 209 "util_expr_parse.y"
 
 
 void yyerror(ap_expr_parse_ctx_t *ctx, char *s)
index 1de8db1f78a3ed71f3261798456cd5b8296bc7ef..ba759f223684e256990089225f91ccc34b6dfe9e 100644 (file)
@@ -599,13 +599,19 @@ static yyconst flex_int16_t yy_chk[319] =
 
 #define YY_EXTRA_TYPE ap_expr_parse_ctx_t*
 
-#define PERROR(msg) yyextra->error2 = msg ; return T_ERROR;
+#define PERROR(msg) do { yyextra->error2 = msg ; return T_ERROR; } while (0)
 
 #define str_ptr     (yyextra->scan_ptr)
 #define str_buf     (yyextra->scan_buf)
 #define str_del     (yyextra->scan_del)
 
-#line 609 "util_expr_scan.c"
+#define STR_APPEND(c) do {                          \
+        *str_ptr++ = (c);                           \
+        if (str_ptr >= str_buf + sizeof(str_buf))   \
+            PERROR("String too long");              \
+    } while (0)
+
+#line 615 "util_expr_scan.c"
 
 #define INITIAL 0
 #define str 1
@@ -850,7 +856,7 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 72 "util_expr_scan.l"
+#line 78 "util_expr_scan.l"
 
 
   char  regex_buf[MAX_STRING_LEN];
@@ -876,7 +882,7 @@ YY_DECL
  /*
   * Whitespaces
   */
-#line 880 "util_expr_scan.c"
+#line 886 "util_expr_scan.c"
 
     yylval = yylval_param;
 
@@ -960,7 +966,7 @@ do_action:  /* This label is used only to access EOF actions. */
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 97 "util_expr_scan.l"
+#line 103 "util_expr_scan.l"
 { 
     /* NOP */
 }
@@ -970,7 +976,7 @@ YY_RULE_SETUP
   */
 case 2:
 YY_RULE_SETUP
-#line 104 "util_expr_scan.l"
+#line 110 "util_expr_scan.l"
 {
     str_ptr = str_buf;
     str_del = yytext[0];
@@ -980,7 +986,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 110 "util_expr_scan.l"
+#line 116 "util_expr_scan.l"
 {
     if (yytext[0] == str_del) {
         if (YY_START == var) {
@@ -1000,27 +1006,27 @@ YY_RULE_SETUP
         }
     }
     else {
-        *str_ptr++ = yytext[0];
+        STR_APPEND(yytext[0]);
     }
 }
        YY_BREAK
 case 4:
 /* rule 4 can match eol */
 YY_RULE_SETUP
-#line 132 "util_expr_scan.l"
+#line 138 "util_expr_scan.l"
 {
     PERROR("Unterminated string or variable");
 }
        YY_BREAK
 case YY_STATE_EOF(var):
 case YY_STATE_EOF(vararg):
-#line 135 "util_expr_scan.l"
+#line 141 "util_expr_scan.l"
 {
     PERROR("Unterminated string or variable");
 }
        YY_BREAK
 case YY_STATE_EOF(str):
-#line 138 "util_expr_scan.l"
+#line 144 "util_expr_scan.l"
 {
     if (!(yyextra->flags & AP_EXPR_FLAG_STRING_RESULT)) {
         PERROR("Unterminated string or variable");
@@ -1036,7 +1042,7 @@ case YY_STATE_EOF(str):
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 151 "util_expr_scan.l"
+#line 157 "util_expr_scan.l"
 {
     int result;
 
@@ -1045,54 +1051,52 @@ YY_RULE_SETUP
         PERROR("Escape sequence out of bound");
     }
     else {
-        *str_ptr++ = result;
+        STR_APPEND(result);
     }
 }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 162 "util_expr_scan.l"
+#line 168 "util_expr_scan.l"
 {
     PERROR("Bad escape sequence");
 }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 165 "util_expr_scan.l"
-{ *str_ptr++ = '\n'; }
+#line 171 "util_expr_scan.l"
+{ STR_APPEND('\n'); }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 166 "util_expr_scan.l"
-{ *str_ptr++ = '\r'; }
+#line 172 "util_expr_scan.l"
+{ STR_APPEND('\r'); }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 167 "util_expr_scan.l"
-{ *str_ptr++ = '\t'; }
+#line 173 "util_expr_scan.l"
+{ STR_APPEND('\t'); }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 168 "util_expr_scan.l"
-{ *str_ptr++ = '\b'; }
+#line 174 "util_expr_scan.l"
+{ STR_APPEND('\b'); }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 169 "util_expr_scan.l"
-{ *str_ptr++ = '\f'; }
+#line 175 "util_expr_scan.l"
+{ STR_APPEND('\f'); }
        YY_BREAK
 case 12:
 /* rule 12 can match eol */
 YY_RULE_SETUP
-#line 170 "util_expr_scan.l"
-{
-    *str_ptr++ = yytext[1];
-}
+#line 176 "util_expr_scan.l"
+{ STR_APPEND(yytext[1]); }
        YY_BREAK
 /* regexp backref inside string/arg */
 case 13:
 YY_RULE_SETUP
-#line 175 "util_expr_scan.l"
+#line 179 "util_expr_scan.l"
 {
     if (str_ptr != str_buf) {
         /* return what we have so far and scan '$x' again */
@@ -1110,17 +1114,19 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 190 "util_expr_scan.l"
+#line 194 "util_expr_scan.l"
 {
     char *cp = yytext;
-    while (*cp != '\0')
-        *str_ptr++ = *cp++;
+    while (*cp != '\0') {
+        STR_APPEND(*cp);
+        cp++;
+    }
 }
        YY_BREAK
 /* variable inside string/arg */
 case 15:
 YY_RULE_SETUP
-#line 197 "util_expr_scan.l"
+#line 203 "util_expr_scan.l"
 {
     if (str_ptr != str_buf) {
         /* return what we have so far and scan '%{' again */
@@ -1138,21 +1144,21 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 212 "util_expr_scan.l"
+#line 218 "util_expr_scan.l"
 {
-     *str_ptr++ = yytext[0];
+     STR_APPEND(yytext[0]);
 }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 216 "util_expr_scan.l"
+#line 222 "util_expr_scan.l"
 {
-     *str_ptr++ = yytext[0];
+     STR_APPEND(yytext[0]);
 }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 220 "util_expr_scan.l"
+#line 226 "util_expr_scan.l"
 {
     yy_push_state(var, yyscanner);
     return T_VAR_BEGIN;
@@ -1160,7 +1166,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 225 "util_expr_scan.l"
+#line 231 "util_expr_scan.l"
 {
     yylval->num = yytext[1] - '0';
     return T_REGEX_BACKREF;
@@ -1171,7 +1177,7 @@ YY_RULE_SETUP
   */
 case 20:
 YY_RULE_SETUP
-#line 233 "util_expr_scan.l"
+#line 239 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
     return T_ID;
@@ -1179,7 +1185,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 238 "util_expr_scan.l"
+#line 244 "util_expr_scan.l"
 {
     yy_pop_state(yyscanner);
     return T_VAR_END;
@@ -1187,7 +1193,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 243 "util_expr_scan.l"
+#line 249 "util_expr_scan.l"
 {
     BEGIN(vararg);
     return yytext[0];
@@ -1196,7 +1202,7 @@ YY_RULE_SETUP
 case 23:
 /* rule 23 can match eol */
 YY_RULE_SETUP
-#line 248 "util_expr_scan.l"
+#line 254 "util_expr_scan.l"
 {
     char *msg = apr_psprintf(yyextra->pool,
                              "Invalid character in variable name '%c'", yytext[0]);
@@ -1205,7 +1211,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 254 "util_expr_scan.l"
+#line 260 "util_expr_scan.l"
 {
     if (str_ptr != str_buf) {
         /* return what we have so far and scan '}' again */
@@ -1226,7 +1232,7 @@ YY_RULE_SETUP
   */
 case 25:
 YY_RULE_SETUP
-#line 272 "util_expr_scan.l"
+#line 278 "util_expr_scan.l"
 {
     regex_del = yytext[1];
     regex_ptr = regex_buf;
@@ -1235,7 +1241,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 277 "util_expr_scan.l"
+#line 283 "util_expr_scan.l"
 {
     regex_del = yytext[0];
     regex_ptr = regex_buf;
@@ -1245,7 +1251,7 @@ YY_RULE_SETUP
 case 27:
 /* rule 27 can match eol */
 YY_RULE_SETUP
-#line 282 "util_expr_scan.l"
+#line 288 "util_expr_scan.l"
 {
     if (yytext[0] == regex_del) {
         *regex_ptr = '\0';
@@ -1253,12 +1259,14 @@ YY_RULE_SETUP
     }
     else {
         *regex_ptr++ = yytext[0];
+        if (regex_ptr >= regex_buf + sizeof(regex_buf))
+            PERROR("Regexp too long");
     }
 }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 291 "util_expr_scan.l"
+#line 299 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, regex_buf);
     BEGIN(INITIAL);
@@ -1268,7 +1276,7 @@ YY_RULE_SETUP
 case 29:
 /* rule 29 can match eol */
 YY_RULE_SETUP
-#line 296 "util_expr_scan.l"
+#line 304 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, regex_buf);
     yyless(0);
@@ -1277,7 +1285,7 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(regex_flags):
-#line 302 "util_expr_scan.l"
+#line 310 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, regex_buf);
     BEGIN(INITIAL);
@@ -1289,153 +1297,153 @@ case YY_STATE_EOF(regex_flags):
   */
 case 30:
 YY_RULE_SETUP
-#line 311 "util_expr_scan.l"
+#line 319 "util_expr_scan.l"
 { return T_OP_STR_EQ; }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 312 "util_expr_scan.l"
+#line 320 "util_expr_scan.l"
 { return T_OP_STR_NE; }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 313 "util_expr_scan.l"
+#line 321 "util_expr_scan.l"
 { return T_OP_STR_LT; }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 314 "util_expr_scan.l"
+#line 322 "util_expr_scan.l"
 { return T_OP_STR_LE; }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 315 "util_expr_scan.l"
+#line 323 "util_expr_scan.l"
 { return T_OP_STR_GT; }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 316 "util_expr_scan.l"
+#line 324 "util_expr_scan.l"
 { return T_OP_STR_GE; }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 317 "util_expr_scan.l"
+#line 325 "util_expr_scan.l"
 { return T_OP_REG; }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 318 "util_expr_scan.l"
+#line 326 "util_expr_scan.l"
 { return T_OP_NRE; }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 319 "util_expr_scan.l"
+#line 327 "util_expr_scan.l"
 { return T_OP_AND; }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 320 "util_expr_scan.l"
+#line 328 "util_expr_scan.l"
 { return T_OP_AND; }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 321 "util_expr_scan.l"
+#line 329 "util_expr_scan.l"
 { return T_OP_OR; }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 322 "util_expr_scan.l"
+#line 330 "util_expr_scan.l"
 { return T_OP_OR; }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 323 "util_expr_scan.l"
+#line 331 "util_expr_scan.l"
 { return T_OP_NOT; }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 324 "util_expr_scan.l"
+#line 332 "util_expr_scan.l"
 { return T_OP_NOT; }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 325 "util_expr_scan.l"
+#line 333 "util_expr_scan.l"
 { return T_OP_CONCAT; }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 326 "util_expr_scan.l"
+#line 334 "util_expr_scan.l"
 { return T_OP_IN; }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 327 "util_expr_scan.l"
+#line 335 "util_expr_scan.l"
 { return T_OP_EQ; }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 328 "util_expr_scan.l"
+#line 336 "util_expr_scan.l"
 { return T_OP_NE; }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 329 "util_expr_scan.l"
+#line 337 "util_expr_scan.l"
 { return T_OP_GE; }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 330 "util_expr_scan.l"
+#line 338 "util_expr_scan.l"
 { return T_OP_LE; }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 331 "util_expr_scan.l"
+#line 339 "util_expr_scan.l"
 { return T_OP_GT; }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 332 "util_expr_scan.l"
+#line 340 "util_expr_scan.l"
 { return T_OP_LT; }
        YY_BREAK
 /* for compatibility with ssl_expr */
 case 52:
 YY_RULE_SETUP
-#line 335 "util_expr_scan.l"
+#line 343 "util_expr_scan.l"
 { return T_OP_LT; }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 336 "util_expr_scan.l"
+#line 344 "util_expr_scan.l"
 { return T_OP_LE; }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 337 "util_expr_scan.l"
+#line 345 "util_expr_scan.l"
 { return T_OP_GT; }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 338 "util_expr_scan.l"
+#line 346 "util_expr_scan.l"
 { return T_OP_GE; }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 339 "util_expr_scan.l"
+#line 347 "util_expr_scan.l"
 { return T_OP_NE; }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 340 "util_expr_scan.l"
+#line 348 "util_expr_scan.l"
 { return T_OP_EQ; }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 341 "util_expr_scan.l"
+#line 349 "util_expr_scan.l"
 { return T_OP_IN; }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 343 "util_expr_scan.l"
+#line 351 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext + 1);
     return T_OP_UNARY;
@@ -1443,7 +1451,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 348 "util_expr_scan.l"
+#line 356 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext + 1);
     return T_OP_BINARY;
@@ -1454,12 +1462,12 @@ YY_RULE_SETUP
   */
 case 61:
 YY_RULE_SETUP
-#line 356 "util_expr_scan.l"
+#line 364 "util_expr_scan.l"
 { return T_TRUE; }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 357 "util_expr_scan.l"
+#line 365 "util_expr_scan.l"
 { return T_FALSE; }
        YY_BREAK
 /*
@@ -1467,7 +1475,7 @@ YY_RULE_SETUP
   */
 case 63:
 YY_RULE_SETUP
-#line 362 "util_expr_scan.l"
+#line 370 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
     return T_DIGIT;
@@ -1478,7 +1486,7 @@ YY_RULE_SETUP
   */
 case 64:
 YY_RULE_SETUP
-#line 370 "util_expr_scan.l"
+#line 378 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
     return T_ID;
@@ -1489,7 +1497,7 @@ YY_RULE_SETUP
   */
 case 65:
 YY_RULE_SETUP
-#line 378 "util_expr_scan.l"
+#line 386 "util_expr_scan.l"
 {
     return yytext[0];
 }
@@ -1500,7 +1508,7 @@ YY_RULE_SETUP
 case 66:
 /* rule 66 can match eol */
 YY_RULE_SETUP
-#line 385 "util_expr_scan.l"
+#line 393 "util_expr_scan.l"
 {
     char *msg = apr_psprintf(yyextra->pool, "Parse error near '%c'", yytext[0]);
     PERROR(msg);
@@ -1508,10 +1516,10 @@ YY_RULE_SETUP
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 390 "util_expr_scan.l"
+#line 398 "util_expr_scan.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 1515 "util_expr_scan.c"
+#line 1523 "util_expr_scan.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(regex):
        yyterminate();
@@ -2653,7 +2661,7 @@ void ap_expr_yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 390 "util_expr_scan.l"
+#line 398 "util_expr_scan.l"