Pārlūkot izejas kodu

BUG: Fixed parsing of unquoted arguments to allow double-quotes within the argument.

Brad King 21 gadi atpakaļ
vecāks
revīzija
2716ac3966
2 mainītis faili ar 35 papildinājumiem un 38 dzēšanām
  1. 34 37
      Source/cmListFileLexer.c
  2. 1 1
      Source/cmListFileLexer.in.l

+ 34 - 37
Source/cmListFileLexer.c

@@ -365,11 +365,11 @@ struct yy_trans_info
         flex_int32_t yy_verify;
         flex_int32_t yy_verify;
         flex_int32_t yy_nxt;
         flex_int32_t yy_nxt;
         };
         };
-static yyconst flex_int16_t yy_accept[28] =
+static yyconst flex_int16_t yy_accept[27] =
     {   0,
     {   0,
         0,    0,    0,    0,   15,    6,   12,    1,    7,    2,
         0,    0,    0,    0,   15,    6,   12,    1,    7,    2,
         3,    4,    6,   13,    8,    9,   10,   11,    6,    0,
         3,    4,    6,   13,    8,    9,   10,   11,    6,    0,
-        2,    2,    2,    5,    8,    0,    0
+        2,    5,    6,    8,    0,    0
     } ;
     } ;
 
 
 static yyconst flex_int32_t yy_ec[256] =
 static yyconst flex_int32_t yy_ec[256] =
@@ -406,47 +406,47 @@ static yyconst flex_int32_t yy_ec[256] =
 
 
 static yyconst flex_int32_t yy_meta[11] =
 static yyconst flex_int32_t yy_meta[11] =
     {   0,
     {   0,
-        1,    2,    3,    4,    1,    2,    2,    1,    1,    1
+        1,    2,    3,    4,    2,    2,    2,    1,    1,    1
     } ;
     } ;
 
 
-static yyconst flex_int16_t yy_base[33] =
+static yyconst flex_int16_t yy_base[32] =
     {   0,
     {   0,
-        0,    0,    8,   16,   21,    7,   69,   69,   69,   26,
-       69,   69,   36,   45,    6,   69,   69,   50,    5,    0,
-        0,    0,    0,    0,    4,    0,   69,   54,   12,   58,
-       60,   64
+        0,    0,    8,   16,   17,    6,   63,   63,   63,    0,
+       63,   63,   26,    0,    5,   63,   63,   34,    4,   37,
+        0,    0,    0,    3,    0,   63,   44,   48,   52,   56,
+       60
     } ;
     } ;
 
 
-static yyconst flex_int16_t yy_def[33] =
+static yyconst flex_int16_t yy_def[32] =
     {   0,
     {   0,
-       27,    1,   28,   28,   27,   29,   27,   27,   27,   27,
-       27,   27,   27,   29,   30,   27,   27,   30,   29,   14,
-       10,   31,   32,   13,   30,   18,    0,   27,   27,   27,
-       27,   27
+       26,    1,   27,   27,   26,   28,   26,   26,   26,   29,
+       26,   26,   26,   30,   31,   26,   26,   31,   28,   28,
+       29,   13,   19,   31,   18,    0,   26,   26,   26,   26,
+       26
     } ;
     } ;
 
 
-static yyconst flex_int16_t yy_nxt[80] =
+static yyconst flex_int16_t yy_nxt[74] =
     {   0,
     {   0,
         6,    7,    8,    9,   10,   11,   12,    6,   13,   14,
         6,    7,    8,    9,   10,   11,   12,    6,   13,   14,
-       16,   17,   19,   26,   20,   26,   20,   18,   16,   17,
-       27,   27,   27,   27,   27,   18,   21,   22,   27,   22,
-       21,   22,   22,   21,   21,   23,   19,   27,   27,   27,
-       19,   27,   27,   24,   24,   20,   19,   27,   19,   27,
-       19,   19,   25,   25,   15,   15,   15,   15,   25,   25,
-       22,   22,   27,   22,   21,   21,   27,   21,    5,   27,
-       27,   27,   27,   27,   27,   27,   27,   27,   27
+       16,   17,   25,   20,   25,   20,   26,   18,   16,   17,
+       26,   26,   26,   26,   26,   18,   19,   26,   26,   19,
+       26,   26,   26,   22,   22,   20,   24,   24,   19,   26,
+       26,   19,   19,   19,   15,   15,   15,   15,   19,   26,
+       26,   19,   21,   21,   26,   21,   23,   23,   26,   23,
+       24,   24,    5,   26,   26,   26,   26,   26,   26,   26,
+       26,   26,   26
     } ;
     } ;
 
 
-static yyconst flex_int16_t yy_chk[80] =
+static yyconst flex_int16_t yy_chk[74] =
     {   0,
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        3,    3,   29,   25,   19,   15,    6,    3,    4,    4,
-        5,    0,    0,    0,    0,    4,   10,   10,    0,   10,
-       10,   10,   10,   10,   10,   10,   13,    0,    0,    0,
-       13,    0,    0,   13,   13,   13,   14,    0,   14,    0,
-       14,   14,   18,   18,   28,   28,   28,   28,   30,   30,
-       31,   31,    0,   31,   32,   32,    0,   32,   27,   27,
-       27,   27,   27,   27,   27,   27,   27,   27,   27
+        3,    3,   24,   19,   15,    6,    5,    3,    4,    4,
+        0,    0,    0,    0,    0,    4,   13,    0,    0,   13,
+        0,    0,    0,   13,   13,   13,   18,   18,   20,    0,
+        0,   20,   20,   20,   27,   27,   27,   27,   28,    0,
+        0,   28,   29,   29,    0,   29,   30,   30,    0,   30,
+       31,   31,   26,   26,   26,   26,   26,   26,   26,   26,
+       26,   26,   26
     } ;
     } ;
 
 
 /* Table of booleans, true if rule could match eol. */
 /* Table of booleans, true if rule could match eol. */
@@ -643,8 +643,6 @@ extern int yywrap (yyscan_t yyscanner );
 #endif
 #endif
 #endif
 #endif
 
 
-
-    
 #ifndef yytext_ptr
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
 #endif
 #endif
@@ -823,13 +821,13 @@ yy_match:
                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                 {
                                 {
                                 yy_current_state = (int) yy_def[yy_current_state];
                                 yy_current_state = (int) yy_def[yy_current_state];
-                                if ( yy_current_state >= 28 )
+                                if ( yy_current_state >= 27 )
                                         yy_c = yy_meta[(unsigned int) yy_c];
                                         yy_c = yy_meta[(unsigned int) yy_c];
                                 }
                                 }
                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                         ++yy_cp;
                         ++yy_cp;
                         }
                         }
-                while ( yy_base[yy_current_state] != 69 );
+                while ( yy_base[yy_current_state] != 63 );
 
 
 yy_find_action:
 yy_find_action:
                 yy_act = yy_accept[yy_current_state];
                 yy_act = yy_accept[yy_current_state];
@@ -1277,7 +1275,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                         {
                         {
                         yy_current_state = (int) yy_def[yy_current_state];
                         yy_current_state = (int) yy_def[yy_current_state];
-                        if ( yy_current_state >= 28 )
+                        if ( yy_current_state >= 27 )
                                 yy_c = yy_meta[(unsigned int) yy_c];
                                 yy_c = yy_meta[(unsigned int) yy_c];
                         }
                         }
                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1306,16 +1304,15 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                 {
                 {
                 yy_current_state = (int) yy_def[yy_current_state];
                 yy_current_state = (int) yy_def[yy_current_state];
-                if ( yy_current_state >= 28 )
+                if ( yy_current_state >= 27 )
                         yy_c = yy_meta[(unsigned int) yy_c];
                         yy_c = yy_meta[(unsigned int) yy_c];
                 }
                 }
         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-        yy_is_jam = (yy_current_state == 27);
+        yy_is_jam = (yy_current_state == 26);
 
 
         return yy_is_jam ? 0 : yy_current_state;
         return yy_is_jam ? 0 : yy_current_state;
 }
 }
 
 
-
 #ifndef YY_NO_INPUT
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
 #ifdef __cplusplus
     static int yyinput (yyscan_t yyscanner)
     static int yyinput (yyscan_t yyscanner)

+ 1 - 1
Source/cmListFileLexer.in.l

@@ -129,7 +129,7 @@ static void cmListFileLexerDestroy(cmListFileLexer* lexer);
   return 1;
   return 1;
 }
 }
 
 
-([^ \t\r\n\(\)\"\\]|\\.)+ {
+([^ \t\r\n\(\)#\\\"]|\\.)([^ \t\r\n\(\)#\\]|\\.)* {
   lexer->token.type = cmListFileLexer_Token_ArgumentUnquoted;
   lexer->token.type = cmListFileLexer_Token_ArgumentUnquoted;
   cmListFileLexerSetToken(lexer, yytext, yyleng);
   cmListFileLexerSetToken(lexer, yytext, yyleng);
   lexer->column += yyleng;
   lexer->column += yyleng;