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: Ian Campbell <Ian.Campbell@citrix.com>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
Grant Likely 2013-06-13 12:57:44 +01:00
Родитель 2a6a08ca5e
Коммит 706b78f37f
2 изменённых файлов: 111 добавлений и 111 удалений

Просмотреть файл

@ -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;

Просмотреть файл

@ -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,
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,
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,
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,
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,
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
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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;