mirror of
https://github.com/mirror/make.git
synced 2025-03-23 16:20:33 +08:00
[SV 59881] Handle vertical TAB consistently
While parsing makefiles get_next_mword() was treating VTAB as a word character rather than a word separator. However, when using find_next_token(), for example in patsubst_expand_pat(), we treated VTAB as a word separator causing multiple words to appear where we didn't expect them. * src/makeint.h (END_OF_TOKEN): Change from a loop to a boolean check. * src/misc.c (end_of_token): Move the loop here. * src/read.c (get_next_mword): Skip whitespace, not just blank, to find the start of the word and use END_OF_TOKEN() to decide when the current word is finished.
This commit is contained in:
parent
da6fc6aae2
commit
c66ec5fa20
@ -463,8 +463,8 @@ extern int unixy_shell;
|
||||
|
||||
#define ISBLANK(c) STOP_SET((c),MAP_BLANK)
|
||||
#define ISSPACE(c) STOP_SET((c),MAP_SPACE)
|
||||
#define END_OF_TOKEN(c) STOP_SET((c),MAP_SPACE|MAP_NUL)
|
||||
#define NEXT_TOKEN(s) while (ISSPACE (*(s))) ++(s)
|
||||
#define END_OF_TOKEN(s) while (! STOP_SET (*(s), MAP_SPACE|MAP_NUL)) ++(s)
|
||||
|
||||
/* We can't run setrlimit when using posix_spawn. */
|
||||
#if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) && !defined(USE_POSIX_SPAWN)
|
||||
|
@ -308,7 +308,8 @@ lindex (const char *s, const char *limit, int c)
|
||||
char *
|
||||
end_of_token (const char *s)
|
||||
{
|
||||
END_OF_TOKEN (s);
|
||||
while (! END_OF_TOKEN (*s))
|
||||
++s;
|
||||
return (char *)s;
|
||||
}
|
||||
|
||||
|
@ -2735,7 +2735,7 @@ get_next_mword (char *buffer, char **startp, size_t *length)
|
||||
char c;
|
||||
|
||||
/* Skip any leading whitespace. */
|
||||
while (ISBLANK (*p))
|
||||
while (ISSPACE (*p))
|
||||
++p;
|
||||
|
||||
beg = p;
|
||||
@ -2821,11 +2821,11 @@ get_next_mword (char *buffer, char **startp, size_t *length)
|
||||
char closeparen;
|
||||
int count;
|
||||
|
||||
if (END_OF_TOKEN (c))
|
||||
goto done_word;
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case '\0':
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '=':
|
||||
goto done_word;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user