Commit 706b78f3 authored by Grant Likely's avatar Grant Likely
Browse files

dtc: ensure #line directives don't consume data from the next line



Previously, the #line parsing regex ended with ({WS}+[0-9]+)?. The {WS}
could match line-break characters. If the #line directive did not contain
the optional flags field at the end, this could cause any integer data on
the next line to be consumed as part of the #line directive parsing. This
could cause syntax errors (i.e. #line parsing consuming the leading 0
from a hex literal 0x1234, leaving x1234 to be parsed as cell data,
which is a syntax error), or invalid compilation results (i.e. simply
consuming literal 1234 as part of the #line processing, thus removing it
from the cell data).

Fix this by replacing {WS} with [ \t] so that it can't match line-breaks.

Convert all instances of {WS}, even though the other instances should be
irrelevant for any well-formed #line directive. This is done for
consistency and ultimate safety.

[Cherry picked from DTC commit a1ee6f068e1c8dbc62873645037a353d7852d5cc]

Reported-by: default avatarIan Campbell <Ian.Campbell@citrix.com>
Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
Acked-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
parent 2a6a08ca
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ static int pop_input_file(void);
			push_input_file(name);
		}

<*>^"#"(line)?{WS}+[0-9]+{WS}+{STRING}({WS}+[0-9]+)? {
<*>^"#"(line)?[ \t]+[0-9]+[ \t]+{STRING}([ \t]+[0-9]+)? {
			char *line, *tmp, *fn;
			/* skip text before line # */
			line = yytext;
+116 −116
Original line number Diff line number Diff line
@@ -405,19 +405,19 @@ static yyconst flex_int16_t yy_accept[161] =
static yyconst flex_int32_t yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        2,    2,    2,    1,    1,    1,    1,    1,    1,    1,
        4,    4,    4,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    4,    5,    6,    1,    1,    7,    8,    1,
        1,    9,   10,   10,   11,   10,   12,   13,   14,   15,
       15,   15,   15,   15,   15,   15,   15,   16,    1,   17,
       18,   19,   10,   10,   20,   20,   20,   20,   20,   20,
       21,   21,   21,   21,   21,   22,   21,   21,   21,   21,
       21,   21,   21,   21,   23,   21,   21,   24,   21,   21,
        1,   25,   26,    1,   21,    1,   20,   27,   28,   29,

       30,   20,   21,   21,   31,   21,   21,   32,   33,   34,
       35,   36,   21,   37,   38,   39,   40,   41,   21,   24,
       42,   21,   43,   44,   45,    1,    1,    1,    1,    1,
        1,    2,    5,    6,    7,    1,    1,    8,    9,    1,
        1,   10,   11,   11,   12,   11,   13,   14,   15,   16,
       16,   16,   16,   16,   16,   16,   16,   17,    1,   18,
       19,   20,   11,   11,   21,   21,   21,   21,   21,   21,
       22,   22,   22,   22,   22,   23,   22,   22,   22,   22,
       22,   22,   22,   22,   24,   22,   22,   25,   22,   22,
        1,   26,   27,    1,   22,    1,   21,   28,   29,   30,

       31,   21,   22,   22,   32,   22,   22,   33,   34,   35,
       36,   37,   22,   38,   39,   40,   41,   42,   22,   25,
       43,   22,   44,   45,   46,    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,    1,
@@ -434,36 +434,36 @@ static yyconst flex_int32_t yy_ec[256] =
        1,    1,    1,    1,    1
    } ;

static yyconst flex_int32_t yy_meta[46] =
static yyconst flex_int32_t yy_meta[47] =
    {   0,
        1,    1,    1,    1,    1,    2,    3,    1,    2,    2,
        2,    4,    5,    5,    5,    6,    1,    1,    1,    7,
        8,    8,    8,    8,    1,    1,    7,    7,    7,    7,
        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
        8,    8,    3,    1,    1
        1,    1,    1,    1,    1,    1,    2,    3,    1,    2,
        2,    2,    4,    5,    5,    5,    6,    1,    1,    1,
        7,    8,    8,    8,    8,    1,    1,    7,    7,    7,
        7,    8,    8,    8,    8,    8,    8,    8,    8,    8,
        8,    8,    8,    3,    1,    1
    } ;

static yyconst flex_int16_t yy_base[175] =
    {   0,
        0,  388,  381,   40,   41,  386,   71,  385,   34,   44,
      390,  395,   60,   62,  371,  112,  111,  111,  111,  104,
      370,  106,  371,  342,  124,  119,    0,  144,  395,    0,
      123,    0,  159,  153,  165,  167,  395,  130,  395,  382,
      395,    0,  372,  122,  395,  157,  374,  379,  350,   21,
      346,  349,  395,  395,  395,  395,  395,  362,  395,  395,
      181,  346,  342,  395,  359,    0,  191,  343,  190,  351,
      350,    0,    0,    0,  173,  362,  177,  367,  357,  329,
      335,  328,  337,  331,  206,  329,  334,  327,  395,  338,
      170,  314,  346,  345,  318,  325,  343,  158,  316,  212,

      322,  319,  320,  395,  340,  336,  308,  305,  314,  304,
      295,  138,  208,  220,  395,  292,  305,  265,  264,  254,
      201,  222,  285,  275,  273,  270,  236,  235,  225,  115,
      395,  395,  252,  216,  216,  217,  214,  230,  209,  220,
      213,  239,  211,  217,  216,  209,  229,  395,  240,  225,
      206,  169,  395,  395,  116,  106,   99,   54,  395,  395,
      254,  260,  268,  272,  276,  282,  289,  293,  301,  309,
      313,  319,  327,  335
        0,  385,  378,   40,   41,  383,   72,  382,   34,   44,
      388,  393,   61,  117,  368,  116,  115,  115,  115,   48,
      367,  107,  368,  339,  127,  120,    0,  147,  393,    0,
      127,    0,  133,  156,  168,  153,  393,  125,  393,  380,
      393,    0,  369,  127,  393,  160,  371,  377,  347,   21,
      343,  346,  393,  393,  393,  393,  393,  359,  393,  393,
      183,  343,  339,  393,  356,    0,  183,  340,  187,  348,
      347,    0,    0,    0,  178,  359,  195,  365,  354,  326,
      332,  325,  334,  328,  204,  326,  331,  324,  393,  335,
      150,  311,  343,  342,  315,  322,  340,  179,  313,  207,

      319,  316,  317,  393,  337,  333,  305,  302,  311,  301,
      310,  190,  338,  337,  393,  307,  322,  301,  305,  277,
      208,  311,  307,  278,  271,  270,  248,  246,  213,  130,
      393,  393,  263,  235,  207,  221,  218,  229,  213,  213,
      206,  234,  218,  210,  208,  193,  219,  393,  223,  204,
      176,  157,  393,  393,  120,  106,   97,  119,  393,  393,
      245,  251,  259,  263,  267,  273,  280,  284,  292,  300,
      304,  310,  318,  326
    } ;

static yyconst flex_int16_t yy_def[175] =
@@ -489,108 +489,108 @@ static yyconst flex_int16_t yy_def[175] =
      160,  160,  160,  160
    } ;

static yyconst flex_int16_t yy_nxt[441] =
static yyconst flex_int16_t yy_nxt[440] =
    {   0,
       12,   13,   14,   15,   16,   12,   17,   18,   12,   12,
       12,   19,   12,   12,   12,   12,   20,   21,   22,   23,
       23,   23,   23,   23,   12,   12,   23,   23,   23,   23,
       12,   13,   14,   13,   15,   16,   12,   17,   18,   12,
       12,   12,   19,   12,   12,   12,   12,   20,   21,   22,
       23,   23,   23,   23,   23,   12,   12,   23,   23,   23,
       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
       23,   23,   12,   24,   12,   25,   34,   35,   35,   25,
       81,   26,   26,   27,   27,   27,   34,   35,   35,   82,
       28,   36,   36,   36,   36,  159,   29,   28,   28,   28,
       28,   12,   13,   14,   15,   16,   30,   17,   18,   30,
       30,   30,   26,   30,   30,   30,   12,   20,   21,   22,
       31,   31,   31,   31,   31,   32,   12,   31,   31,   31,
       23,   23,   23,   12,   24,   12,   25,   34,   35,   35,
       25,   81,   26,   26,   27,   27,   27,   34,   35,   35,
       82,   28,   36,   36,   36,   53,   54,   29,   28,   28,
       28,   28,   12,   13,   14,   13,   15,   16,   30,   17,
       18,   30,   30,   30,   26,   30,   30,   30,   12,   20,
       21,   22,   31,   31,   31,   31,   31,   32,   12,   31,

       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   12,   24,   12,   39,   41,   45,   47,
       53,   54,   48,   56,   57,   61,   61,   47,   66,   45,
       48,   66,   66,   66,   39,   46,   40,   49,   59,   50,
      158,   51,  122,   52,  157,   49,   46,   50,  136,   63,
      137,   52,  156,   43,   40,   62,   65,   65,   65,   59,
       61,   61,  123,   65,   75,   69,   69,   69,   36,   36,
       65,   65,   65,   65,   70,   71,   72,   69,   69,   69,
       45,   46,   61,   61,  109,   77,   70,   71,   93,  110,
       68,   70,   71,   85,   85,   85,   66,   46,  155,   66,

       66,   66,   69,   69,   69,  122,   59,  100,  100,   61,
       61,   70,   71,  100,  100,  148,  112,  154,   85,   85,
       85,   61,   61,  129,  129,  123,  129,  129,  135,  135,
      135,  142,  142,  148,  143,  149,  153,  135,  135,  135,
      142,  142,  160,  143,  152,  151,  150,  146,  145,  144,
      141,  140,  139,  149,   38,   38,   38,   38,   38,   38,
       38,   38,   42,  138,  134,  133,   42,   42,   44,   44,
       44,   44,   44,   44,   44,   44,   58,   58,   58,   58,
       64,  132,   64,   66,  131,  130,   66,  160,   66,   66,
       67,  128,  127,   67,   67,   67,   67,   73,  126,   73,

       73,   76,   76,   76,   76,   76,   76,   76,   76,   78,
       78,   78,   78,   78,   78,   78,   78,   91,  125,   91,
       92,  124,   92,   92,  120,   92,   92,  121,  121,  121,
      121,  121,  121,  121,  121,  147,  147,  147,  147,  147,
      147,  147,  147,  119,  118,  117,  116,  115,   47,  114,
      110,  113,  111,  108,  107,  106,   48,  105,  104,   89,
      103,  102,  101,   99,   98,   97,   96,   95,   94,   79,
       77,   90,   89,   88,   59,   87,   86,   59,   84,   83,
       80,   79,   77,   74,  160,   60,   59,   55,   37,  160,
       33,   25,   26,   25,   11,  160,  160,  160,  160,  160,
       31,   31,   31,   31,   31,   12,   24,   12,   36,   36,
       36,   39,   41,   45,   47,   56,   57,   48,   61,   47,
       39,  159,   48,   66,   61,   45,   66,   66,   66,  158,
       46,   40,   49,   59,   50,  157,   51,   49,   52,   50,
       40,   63,   46,   52,   36,   36,   36,  156,   43,   62,
       65,   65,   65,   59,  136,   68,  137,   65,   75,   69,
       69,   69,   70,   71,   65,   65,   65,   65,   70,   71,
       72,   69,   69,   69,   61,   46,   45,  155,  154,   66,
       70,   71,   66,   66,   66,  122,   85,   85,   85,   59,

       69,   69,   69,   46,   77,  100,  109,   93,  100,   70,
       71,  110,  112,  122,  129,  123,  153,   85,   85,   85,
      135,  135,  135,  148,  148,  160,  135,  135,  135,  152,
      142,  142,  142,  123,  143,  142,  142,  142,  151,  143,
      150,  146,  145,  149,  149,   38,   38,   38,   38,   38,
       38,   38,   38,   42,  144,  141,  140,   42,   42,   44,
       44,   44,   44,   44,   44,   44,   44,   58,   58,   58,
       58,   64,  139,   64,   66,  138,  134,   66,  133,   66,
       66,   67,  132,  131,   67,   67,   67,   67,   73,  130,
       73,   73,   76,   76,   76,   76,   76,   76,   76,   76,

       78,   78,   78,   78,   78,   78,   78,   78,   91,  160,
       91,   92,  129,   92,   92,  128,   92,   92,  121,  121,
      121,  121,  121,  121,  121,  121,  147,  147,  147,  147,
      147,  147,  147,  147,  127,  126,  125,  124,   61,   61,
      120,  119,  118,  117,  116,  115,   47,  114,  110,  113,
      111,  108,  107,  106,   48,  105,  104,   89,  103,  102,
      101,   99,   98,   97,   96,   95,   94,   79,   77,   90,
       89,   88,   59,   87,   86,   59,   84,   83,   80,   79,
       77,   74,  160,   60,   59,   55,   37,  160,   33,   25,
       26,   25,   11,  160,  160,  160,  160,  160,  160,  160,

      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
      160,  160,  160,  160,  160,  160,  160,  160,  160,  160
      160,  160,  160,  160,  160,  160,  160,  160,  160
    } ;

static yyconst flex_int16_t yy_chk[441] =
static yyconst flex_int16_t yy_chk[440] =
    {   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,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    4,    9,    9,    9,   10,
       50,    4,    5,    5,    5,    5,   10,   10,   10,   50,
        5,   13,   13,   14,   14,  158,    5,    5,    5,    5,
        5,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        1,    1,    1,    1,    1,    1,    4,    9,    9,    9,
       10,   50,    4,    5,    5,    5,    5,   10,   10,   10,
       50,    5,   13,   13,   13,   20,   20,    5,    5,    5,
        5,    5,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,

        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,   16,   17,   18,   19,
       20,   20,   19,   22,   22,   25,   25,   26,   31,   44,
       26,   31,   31,   31,   38,   18,   16,   19,   31,   19,
      157,   19,  112,   19,  156,   26,   44,   26,  130,   26,
      130,   26,  155,   17,   38,   25,   28,   28,   28,   28,
       33,   33,  112,   28,   46,   34,   34,   34,   36,   36,
       28,   28,   28,   28,   34,   34,   34,   35,   35,   35,
       75,   46,   61,   61,   98,   77,   35,   35,   77,   98,
       33,   91,   91,   61,   61,   61,   67,   75,  152,   67,

       67,   67,   69,   69,   69,  121,   67,   85,   85,  113,
      113,   69,   69,  100,  100,  143,  100,  151,   85,   85,
       85,  114,  114,  122,  122,  121,  129,  129,  135,  135,
      135,  138,  138,  147,  138,  143,  150,  129,  129,  129,
      142,  142,  149,  142,  146,  145,  144,  141,  140,  139,
      137,  136,  134,  147,  161,  161,  161,  161,  161,  161,
      161,  161,  162,  133,  128,  127,  162,  162,  163,  163,
      163,  163,  163,  163,  163,  163,  164,  164,  164,  164,
      165,  126,  165,  166,  125,  124,  166,  123,  166,  166,
      167,  120,  119,  167,  167,  167,  167,  168,  118,  168,

      168,  169,  169,  169,  169,  169,  169,  169,  169,  170,
      170,  170,  170,  170,  170,  170,  170,  171,  117,  171,
      172,  116,  172,  172,  111,  172,  172,  173,  173,  173,
      173,  173,  173,  173,  173,  174,  174,  174,  174,  174,
      174,  174,  174,  110,  109,  108,  107,  106,  105,  103,
      102,  101,   99,   97,   96,   95,   94,   93,   92,   90,
       88,   87,   86,   84,   83,   82,   81,   80,   79,   78,
       76,   71,   70,   68,   65,   63,   62,   58,   52,   51,
       49,   48,   47,   43,   40,   24,   23,   21,   15,   11,
        8,    6,    3,    2,  160,  160,  160,  160,  160,  160,
        7,    7,    7,    7,    7,    7,    7,    7,   14,   14,
       14,   16,   17,   18,   19,   22,   22,   19,   25,   26,
       38,  158,   26,   31,   33,   44,   31,   31,   31,  157,
       18,   16,   19,   31,   19,  156,   19,   26,   19,   26,
       38,   26,   44,   26,   36,   36,   36,  155,   17,   25,
       28,   28,   28,   28,  130,   33,  130,   28,   46,   34,
       34,   34,   91,   91,   28,   28,   28,   28,   34,   34,
       34,   35,   35,   35,   61,   46,   75,  152,  151,   67,
       35,   35,   67,   67,   67,  112,   61,   61,   61,   67,

       69,   69,   69,   75,   77,   85,   98,   77,  100,   69,
       69,   98,  100,  121,  129,  112,  150,   85,   85,   85,
      135,  135,  135,  143,  147,  149,  129,  129,  129,  146,
      138,  138,  138,  121,  138,  142,  142,  142,  145,  142,
      144,  141,  140,  143,  147,  161,  161,  161,  161,  161,
      161,  161,  161,  162,  139,  137,  136,  162,  162,  163,
      163,  163,  163,  163,  163,  163,  163,  164,  164,  164,
      164,  165,  134,  165,  166,  133,  128,  166,  127,  166,
      166,  167,  126,  125,  167,  167,  167,  167,  168,  124,
      168,  168,  169,  169,  169,  169,  169,  169,  169,  169,

      170,  170,  170,  170,  170,  170,  170,  170,  171,  123,
      171,  172,  122,  172,  172,  120,  172,  172,  173,  173,
      173,  173,  173,  173,  173,  173,  174,  174,  174,  174,
      174,  174,  174,  174,  119,  118,  117,  116,  114,  113,
      111,  110,  109,  108,  107,  106,  105,  103,  102,  101,
       99,   97,   96,   95,   94,   93,   92,   90,   88,   87,
       86,   84,   83,   82,   81,   80,   79,   78,   76,   71,
       70,   68,   65,   63,   62,   58,   52,   51,   49,   48,
       47,   43,   40,   24,   23,   21,   15,   11,    8,    6,
        3,    2,  160,  160,  160,  160,  160,  160,  160,  160,

      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
      160,  160,  160,  160,  160,  160,  160,  160,  160,  160
      160,  160,  160,  160,  160,  160,  160,  160,  160
    } ;

static yy_state_type yy_last_accepting_state;