* src/read.c (parse_file_seq): [SV 52076] Don't reverse glob() results.

This commit is contained in:
Paul Smith 2019-09-02 11:06:40 -04:00
parent 715c787dc6
commit 7e60ffe83e
2 changed files with 26 additions and 51 deletions

View File

@ -3182,7 +3182,7 @@ parse_file_seq (char **stringp, size_t size, int stopmap,
#endif
char *s;
size_t nlen;
int i;
int tot, i;
/* Skip whitespace; at the end of the string or STOPCHAR we're done. */
NEXT_TOKEN (p);
@ -3391,7 +3391,7 @@ parse_file_seq (char **stringp, size_t size, int stopmap,
if (NONE_SET (flags, PARSEFS_EXISTS) && strpbrk (name, "?*[") == NULL)
{
globme = 0;
i = 1;
tot = 1;
nlist = &name;
}
else
@ -3402,7 +3402,7 @@ parse_file_seq (char **stringp, size_t size, int stopmap,
case 0:
/* Success. */
i = gl.gl_pathc;
tot = gl.gl_pathc;
nlist = (const char **)gl.gl_pathv;
break;
@ -3410,20 +3410,20 @@ parse_file_seq (char **stringp, size_t size, int stopmap,
/* If we want only existing items, skip this one. */
if (ANY_SET (flags, PARSEFS_EXISTS))
{
i = 0;
tot = 0;
break;
}
/* FALLTHROUGH */
default:
/* By default keep this name. */
i = 1;
tot = 1;
nlist = &name;
break;
}
/* For each matched element, add it to the list. */
while (i-- > 0)
for (i = 0; i < tot; ++i)
#ifndef NO_ARCHIVES
if (memname != 0)
{

View File

@ -13,52 +13,33 @@ test echo's all files which match '?.example' and
[a-z0-9].example. Lastly we clean up all of the files using
the '*' wildcard as in the first test";
open(MAKEFILE,"> $makefile");
# The Contents of the MAKEFILE ...
print MAKEFILE <<EOM;
.PHONY: print1 print2 clean
print1: ;\@echo \$(sort \$(wildcard example.*))
print2:
\t\@echo \$(sort \$(wildcard example.?))
\t\@echo \$(sort \$(wildcard example.[a-z0-9]))
\t\@echo \$(sort \$(wildcard example.[!A-Za-z_\\!]))
clean:
\t$CMD_rmfile \$(sort \$(wildcard example.*))
EOM
# END of Contents of MAKEFILE
close(MAKEFILE);
&touch("example.1");
&touch("example.two");
&touch("example.3");
&touch("example.for");
&touch("example._");
touch("example.1");
touch("example.two");
touch("example.3");
touch("example.for");
touch("example._");
# TEST #1
# -------
$answer = "example.1 example.3 example._ example.for example.two\n";
&run_make_with_options($makefile,"print1",&get_logfile);
&compare_output($answer,&get_logfile(1));
run_make_test(qq/
.PHONY: print1 print2 clean
print1: ;\@echo \$(wildcard example.*)
print2:
\t\@echo \$(wildcard example.?)
\t\@echo \$(wildcard example.[a-z0-9])
\t\@echo \$(wildcard example.[!A-Za-z_\\!])
clean:
\t$CMD_rmfile \$(wildcard example.*)
/,
'print1', "example.1 example.3 example._ example.for example.two\n");
# TEST #2
# -------
$answer = "example.1 example.3 example._\n"
."example.1 example.3\n"
."example.1 example.3\n";
&run_make_with_options($makefile,"print2",&get_logfile);
&compare_output($answer,&get_logfile(1));
run_make_test(undef, 'print2', "example.1 example.3 example._\n"
."example.1 example.3\n"
."example.1 example.3\n");
# TEST #3
# -------
@ -73,13 +54,7 @@ else
$answer .= "\n";
}
&run_make_with_options($makefile,"clean",&get_logfile);
if ((-f "example.1")||(-f "example.two")||(-f "example.3")||(-f "example.for")) {
$test_passed = 0;
}
&compare_output($answer,&get_logfile(1));
run_make_test(undef, 'clean', $answer);
# TEST #4: Verify that failed wildcards don't return the pattern