Fix the windmc program to conform to the behaviour of mc.exe by rejecting lines that reach end-of-file without a terminating newline character.
PR 26082 * mclex.c (yylex): Reject lines that reach end-of-file without a terminating newline character.
This commit is contained in:
parent
cab5c3b707
commit
25065fcd19
|
@ -1,3 +1,9 @@
|
|||
2020-06-10 Ralf Habacker <ralf.habacker@freenet.de>
|
||||
|
||||
PR 26082
|
||||
* mclex.c (yylex): Reject lines that reach end-of-file without a
|
||||
terminating newline character.
|
||||
|
||||
2020-06-08 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR 26093
|
||||
|
|
|
@ -323,6 +323,21 @@ mc_token (const unichar *t, size_t len)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* Skip characters in input_stream_pos up to and including a newline
|
||||
character. Returns non-zero if the newline was found, zero otherwise. */
|
||||
|
||||
static int
|
||||
skip_until_eol (void)
|
||||
{
|
||||
while (input_stream_pos[0] != 0 && input_stream_pos[0] != '\n')
|
||||
++input_stream_pos;
|
||||
if (input_stream_pos[0] == 0)
|
||||
return 0;
|
||||
if (input_stream_pos[0] == '\n')
|
||||
++input_stream_pos;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
yylex (void)
|
||||
{
|
||||
|
@ -334,29 +349,28 @@ yylex (void)
|
|||
fatal ("Input stream not setuped.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mclex_want_line)
|
||||
{
|
||||
start_token = input_stream_pos;
|
||||
if (input_stream_pos[0] == 0)
|
||||
return -1;
|
||||
/* PR 26082: Reject a period followed by EOF. */
|
||||
if (input_stream_pos[0] == '.' && input_stream_pos[1] == 0)
|
||||
return -1;
|
||||
if (input_stream_pos[0] == '.'
|
||||
&& (input_stream_pos[1] == '\n'
|
||||
|| (input_stream_pos[1] == '\r' && input_stream_pos[2] == '\n')))
|
||||
{
|
||||
mclex_want_line = FALSE;
|
||||
while (input_stream_pos[0] != 0 && input_stream_pos[0] != '\n')
|
||||
++input_stream_pos;
|
||||
if (input_stream_pos[0] == '\n')
|
||||
++input_stream_pos;
|
||||
return MCENDLINE;
|
||||
return skip_until_eol () ? MCENDLINE : -1;
|
||||
}
|
||||
while (input_stream_pos[0] != 0 && input_stream_pos[0] != '\n')
|
||||
++input_stream_pos;
|
||||
if (input_stream_pos[0] == '\n')
|
||||
++input_stream_pos;
|
||||
if (!skip_until_eol ())
|
||||
return -1;
|
||||
yylval.ustr = get_diff (input_stream_pos, start_token);
|
||||
return MCLINE;
|
||||
}
|
||||
|
||||
while ((ch = input_stream_pos[0]) <= 0x20)
|
||||
{
|
||||
if (ch == 0)
|
||||
|
@ -404,10 +418,8 @@ yylex (void)
|
|||
{
|
||||
case ';':
|
||||
++start_token;
|
||||
while (input_stream_pos[0] != '\n' && input_stream_pos[0] != 0)
|
||||
++input_stream_pos;
|
||||
if (input_stream_pos[0] == '\n')
|
||||
input_stream_pos++;
|
||||
if (!skip_until_eol ())
|
||||
return -1;
|
||||
yylval.ustr = get_diff (input_stream_pos, start_token);
|
||||
return MCCOMMENT;
|
||||
case '=':
|
||||
|
|
Loading…
Reference in New Issue