preprocessor: Check for line number overflow

Also remove dead code in Tokenizer.l

BUG=chromium:668842

Change-Id: Ice18313a64f0bb2242299993bfaa882a6578ad54
Reviewed-on: https://chromium-review.googlesource.com/435042
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/preprocessor/Tokenizer.cpp b/src/compiler/preprocessor/Tokenizer.cpp
index 4cc0f90..76b376b 100644
--- a/src/compiler/preprocessor/Tokenizer.cpp
+++ b/src/compiler/preprocessor/Tokenizer.cpp
@@ -724,8 +724,8 @@
 	yyg->yy_hold_char = *yy_cp; \
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 38
-#define YY_END_OF_BUFFER 39
+#define YY_NUM_RULES 37
+#define YY_END_OF_BUFFER 38
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -733,18 +733,18 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[98] =
+static const flex_int16_t yy_accept[95] =
     {   0,
-        0,    0,    0,    0,   39,   37,   34,   35,   35,   33,
+        0,    0,    0,    0,   38,   36,   34,   35,   35,   33,
         7,   33,   33,   33,   33,   33,   33,   33,   33,    9,
-        9,   33,   33,   33,    8,   37,   33,   33,    3,    5,
-        5,    4,   34,   35,   19,   27,   20,   30,   25,   12,
-       23,   13,   24,   10,    2,    1,   26,   10,    9,   11,
-       11,   11,    9,   11,    9,    9,   14,   16,   18,   17,
-       15,    8,   36,   36,   31,   21,   32,   22,    3,    5,
-        6,   11,   10,   11,   10,    1,   10,   11,   10,    0,
-       10,    9,    9,    9,   28,   29,    0,   10,   10,   10,
-       10,    9,   10,   10,    9,   10,    0
+        9,   33,   33,   33,    8,   33,   33,    3,    5,    5,
+        4,   34,   35,   19,   27,   20,   30,   25,   12,   23,
+       13,   24,   10,    2,    1,   26,   10,    9,   11,   11,
+       11,    9,   11,    9,    9,   14,   16,   18,   17,   15,
+        8,   31,   21,   32,   22,    3,    5,    6,   11,   10,
+       11,   10,    1,   10,   11,   10,    0,   10,    9,    9,
+        9,   28,   29,    0,   10,   10,   10,   10,    9,   10,
+       10,    9,   10,    0
 
     } ;
 
@@ -759,11 +759,11 @@
        19,   20,    9,    1,   21,   21,   21,   21,   22,   23,
        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
        24,   24,   24,   24,   25,   24,   24,   26,   24,   24,
-        9,   27,    9,   28,   24,    1,   21,   21,   21,   21,
+        9,    1,    9,   27,   24,    1,   21,   21,   21,   21,
 
        22,   23,   24,   24,   24,   24,   24,   24,   24,   24,
        24,   24,   24,   24,   24,   24,   25,   24,   24,   26,
-       24,   24,    9,   29,    9,    9,    1,    1,    1,    1,
+       24,   24,    9,   28,    9,    9,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -780,101 +780,99 @@
         1,    1,    1,    1,    1
     } ;
 
-static const YY_CHAR yy_meta[30] =
+static const YY_CHAR yy_meta[29] =
     {   0,
         1,    1,    2,    2,    1,    1,    1,    1,    1,    3,
         1,    1,    4,    1,    5,    5,    5,    1,    1,    1,
-        5,    5,    5,    5,    5,    5,    1,    1,    1
+        5,    5,    5,    5,    5,    5,    1,    1
     } ;
 
-static const flex_int16_t yy_base[103] =
+static const flex_int16_t yy_base[100] =
     {   0,
-        0,    0,   27,   29,  137,  194,  133,  194,  117,  100,
-      194,   98,   26,  194,   94,   24,   28,   33,   32,   39,
-       51,   39,   80,   50,    0,   68,   25,   54,    0,  194,
-       88,   71,   80,  194,  194,  194,  194,  194,  194,  194,
-      194,  194,  194,   71,  194,    0,  194,   85,   55,   64,
-       99,  111,   53,  105,    0,   50,   55,  194,  194,  194,
-       40,    0,  194,   38,  194,  194,  194,  194,    0,  194,
-      194,  117,    0,  130,    0,    0,    0,  137,    0,   88,
-      113,    0,  131,    0,  194,  194,  143,  139,  152,  150,
-        0,   13,  153,  194,    0,  194,  194,  176,   31,  181,
+        0,    0,   26,   28,  133,  195,  130,  195,  128,  105,
+      195,  104,   25,  195,  100,   23,   27,   32,   31,   38,
+       50,   38,   93,   49,    0,   16,   51,    0,  195,  105,
+       87,   93,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,   67,  195,    0,  195,   81,   55,   84,   98,
+      110,   53,   61,    0,   52,   39,  195,  195,  195,   33,
+        0,  195,  195,  195,  195,    0,  195,  195,  113,    0,
+      126,    0,    0,    0,  133,    0,   56,  128,    0,  133,
+        0,  195,  195,  101,  141,  143,  145,    0,   15,  154,
+      195,    0,  195,  195,  177,   32,  182,  187,  189
 
-      186,  188
     } ;
 
-static const flex_int16_t yy_def[103] =
+static const flex_int16_t yy_def[100] =
     {   0,
-       97,    1,   98,   98,   97,   97,   97,   97,   97,   97,
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       20,   97,   97,   97,   99,   97,   97,   97,  100,   97,
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   97,   97,   97,  101,   97,   97,   20,   20,
-       50,   51,   51,  102,   21,   51,   97,   97,   97,   97,
-       97,   99,   97,   97,   97,   97,   97,   97,  100,   97,
-       97,   44,   44,   72,   72,  101,   48,   51,   51,   97,
-       52,   51,  102,   51,   97,   97,   97,   74,   78,   97,
-       51,   51,   97,   97,   51,   97,    0,   97,   97,   97,
+       94,    1,   95,   95,   94,   94,   94,   94,   94,   94,
+       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
+       20,   94,   94,   94,   96,   94,   94,   97,   94,   94,
+       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
+       94,   94,   94,   94,   98,   94,   94,   20,   20,   49,
+       50,   50,   99,   21,   50,   94,   94,   94,   94,   94,
+       96,   94,   94,   94,   94,   97,   94,   94,   43,   43,
+       69,   69,   98,   47,   50,   50,   94,   51,   50,   99,
+       50,   94,   94,   94,   71,   75,   94,   50,   50,   94,
+       94,   50,   94,    0,   94,   94,   94,   94,   94
 
-       97,   97
     } ;
 
 static const flex_int16_t yy_nxt[224] =
     {   0,
         6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
        16,   17,   18,   19,   20,   21,   21,   22,   23,   24,
-       25,   25,   25,   25,   25,   25,   26,   27,   28,   30,
-       31,   30,   31,   37,   40,   62,   32,   95,   32,   42,
-       63,   45,   41,   65,   38,   46,   43,   44,   44,   44,
-       47,   48,   66,   49,   49,   50,   57,   58,   86,   51,
-       52,   51,   51,   53,   54,   55,   55,   55,   60,   61,
-       63,   64,   67,   85,   84,   56,   51,   82,   50,   50,
-       51,   33,   68,   72,   71,   73,   73,   73,   51,   51,
-       70,   72,   74,   75,   72,   72,   72,   51,   59,   77,
+       25,   25,   25,   25,   25,   25,   26,   27,   29,   30,
+       29,   30,   36,   39,   62,   31,   61,   31,   41,   92,
+       44,   40,   63,   37,   45,   42,   43,   43,   43,   46,
+       47,   83,   48,   48,   49,   56,   57,   82,   50,   51,
+       50,   50,   52,   53,   54,   54,   54,   59,   60,   64,
+       87,   87,   87,   50,   55,   50,   81,   79,   65,   69,
+       50,   70,   70,   70,   50,   50,   50,   69,   71,   72,
+       69,   69,   69,   50,   32,   74,   74,   74,   49,   49,
 
-       77,   77,   90,   90,   90,   51,   78,   79,   51,   51,
-       51,   51,   39,   51,   51,   51,   36,   51,   35,   34,
-       51,   80,   80,   97,   97,   81,   81,   81,   51,   51,
-       51,   72,   72,   72,   33,   91,   97,   97,   72,   72,
-       87,   87,   97,   51,   88,   88,   88,   87,   87,   97,
-       97,   89,   89,   89,   51,   92,   51,   93,   93,   93,
-       97,   75,   97,   97,   90,   90,   90,   93,   93,   93,
-       97,   97,   94,   97,   79,   96,   29,   29,   29,   29,
-       29,   69,   97,   97,   69,   69,   76,   97,   76,   76,
-       76,   83,   83,    5,   97,   97,   97,   97,   97,   97,
+       68,   50,   75,   76,   50,   50,   50,   67,   50,   50,
+       50,   58,   50,   50,   50,   90,   90,   90,   38,   50,
+       77,   77,   35,   34,   78,   78,   78,   69,   69,   69,
+       33,   32,   94,   94,   69,   69,   84,   84,   94,   94,
+       85,   85,   85,   84,   84,   50,   94,   86,   86,   86,
+       88,   94,   94,   94,   94,   94,   50,   89,   50,   87,
+       87,   87,   94,   72,   94,   76,   94,   91,   90,   90,
+       90,   94,   94,   94,   94,   94,   93,   28,   28,   28,
+       28,   28,   66,   94,   94,   66,   66,   73,   94,   73,
+       73,   73,   80,   80,    5,   94,   94,   94,   94,   94,
 
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   97
+       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
+       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
+       94,   94,   94
     } ;
 
 static const flex_int16_t yy_chk[224] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
-        3,    4,    4,   13,   16,   99,    3,   92,    4,   17,
-       64,   19,   16,   27,   13,   19,   17,   18,   18,   18,
-       19,   20,   27,   20,   20,   20,   22,   22,   61,   20,
-       20,   20,   20,   20,   20,   21,   21,   21,   24,   24,
-       26,   26,   28,   57,   56,   21,   21,   53,   50,   50,
-       49,   33,   28,   44,   32,   44,   44,   44,   50,   50,
-       31,   44,   44,   44,   44,   44,   44,   48,   23,   48,
+        1,    1,    1,    1,    1,    1,    1,    1,    3,    3,
+        4,    4,   13,   16,   26,    3,   96,    4,   17,   89,
+       19,   16,   26,   13,   19,   17,   18,   18,   18,   19,
+       20,   60,   20,   20,   20,   22,   22,   56,   20,   20,
+       20,   20,   20,   20,   21,   21,   21,   24,   24,   27,
+       77,   77,   77,   53,   21,   21,   55,   52,   27,   43,
+       48,   43,   43,   43,   53,   53,   53,   43,   43,   43,
+       43,   43,   43,   47,   32,   47,   47,   47,   49,   49,
 
-       48,   48,   80,   80,   80,   48,   48,   48,   48,   48,
-       48,   51,   15,   51,   51,   51,   12,   54,   10,    9,
-       51,   52,   52,   81,   81,   52,   52,   52,   54,   54,
-       54,   72,   72,   72,    7,   81,    5,    0,   72,   72,
-       74,   74,    0,   83,   74,   74,   74,   78,   78,   88,
-       88,   78,   78,   78,   83,   83,   83,   87,   87,   87,
-        0,   88,   89,   89,   90,   90,   90,   93,   93,   93,
-        0,    0,   90,    0,   89,   93,   98,   98,   98,   98,
-       98,  100,    0,    0,  100,  100,  101,    0,  101,  101,
-      101,  102,  102,   97,   97,   97,   97,   97,   97,   97,
+       31,   47,   47,   47,   47,   47,   47,   30,   49,   49,
+       50,   23,   50,   50,   50,   84,   84,   84,   15,   50,
+       51,   51,   12,   10,   51,   51,   51,   69,   69,   69,
+        9,    7,    5,    0,   69,   69,   71,   71,   78,   78,
+       71,   71,   71,   75,   75,   80,    0,   75,   75,   75,
+       78,   85,   85,   86,   86,    0,   80,   80,   80,   87,
+       87,   87,    0,   85,    0,   86,    0,   87,   90,   90,
+       90,    0,    0,    0,    0,    0,   90,   95,   95,   95,
+       95,   95,   97,    0,    0,   97,   97,   98,    0,   98,
+       98,   98,   99,   99,   94,   94,   94,   94,   94,   94,
 
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   97
+       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
+       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
+       94,   94,   94
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1378,13 +1376,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 98 )
+				if ( yy_current_state >= 95 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 97 );
+		while ( yy_current_state != 94 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1429,7 +1427,14 @@
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
-{ ++yylineno; }
+{
+    if (yylineno == INT_MAX)
+    {
+        *yylval = "Integer overflow on line number";
+        return pp::Token::GOT_ERROR;
+    }
+    ++yylineno;
+}
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
@@ -1638,17 +1643,17 @@
 /* rule 35 can match eol */
 YY_RULE_SETUP
 {
+    if (yylineno == INT_MAX)
+    {
+        *yylval = "Integer overflow on line number";
+        return pp::Token::GOT_ERROR;
+    }
     ++yylineno;
     yylval->assign(1, '\n');
     return '\n';
 }
 	YY_BREAK
 case 36:
-/* rule 36 can match eol */
-YY_RULE_SETUP
-{ ++yylineno; }
-	YY_BREAK
-case 37:
 YY_RULE_SETUP
 {
     yylval->assign(1, yytext[0]);
@@ -1684,7 +1689,7 @@
     yyterminate();
 }
 	YY_BREAK
-case 38:
+case 37:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -1992,7 +1997,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 98 )
+			if ( yy_current_state >= 95 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -2022,11 +2027,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 98 )
+		if ( yy_current_state >= 95 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 97);
+	yy_is_jam = (yy_current_state == 94);
 
 	(void)yyg;
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3006,7 +3011,18 @@
 
 void Tokenizer::lex(Token *token)
 {
-    token->type = yylex(&token->text, &token->location, mHandle);
+    int tokenType = yylex(&token->text, &token->location, mHandle);
+
+    if (tokenType == Token::GOT_ERROR)
+    {
+        mContext.diagnostics->report(Diagnostics::PP_TOKENIZER_ERROR, token->location, token->text);
+        token->type = Token::LAST;
+    }
+    else
+    {
+        token->type = tokenType;
+    }
+
     if (token->text.size() > mMaxTokenSize)
     {
         mContext.diagnostics->report(Diagnostics::PP_TOKEN_TOO_LONG,