* src/read.c (eval): [SV 40942] Allow targets named "load"

Previously "load:" worked but "load :" failed.  Allow the latter as
well.  This doesn't fix all issues; "load foo :" is still treated
as a load operation for "foo" and ":".  Avoids SV 50413 as well.
* tests/scripts/features/load: Write tests.
This commit is contained in:
Paul Smith
2023-05-06 16:12:11 -04:00
parent 24a84f99bb
commit 3f28ec2f58
2 changed files with 24 additions and 3 deletions

View File

@@ -621,6 +621,7 @@ eval (struct ebuffer *ebuf, int set_default)
size_t wlen;
char *p;
char *p2;
unsigned int is_rule;
struct vmodifiers vmod;
/* At the top of this loop, we are starting a brand new line. */
@@ -760,6 +761,8 @@ eval (struct ebuffer *ebuf, int set_default)
wlen = p2 - p;
NEXT_TOKEN (p2);
is_rule = *p2 == ':' || ((*p2 == '&' || *p2 == '|') && p2[1] == ':');
/* If we're in an ignored define, skip this line (but maybe get out). */
if (in_ignored_define)
{
@@ -910,8 +913,8 @@ eval (struct ebuffer *ebuf, int set_default)
continue;
}
/* Handle the load operations. */
if (word1eq ("load") || word1eq ("-load"))
/* Handle the load operations. Allow targets named "load". */
if ((word1eq ("load") || word1eq ("-load")) && !is_rule)
{
/* A 'load' line specifies a dynamic object to load. */
struct nameseq *files;