]> git.ipfire.org Git - thirdparty/make.git/commitdiff
* src/read.c (parse_file_seq): [SV 52076] Don't reverse glob() results.
authorPaul Smith <psmith@gnu.org>
Mon, 2 Sep 2019 15:06:40 +0000 (11:06 -0400)
committerPaul Smith <psmith@gnu.org>
Mon, 2 Sep 2019 15:11:26 +0000 (11:11 -0400)
src/read.c
tests/scripts/functions/wildcard

index 175d71451ac5735b15b898cf823d40fdd6655c5d..76e9ed37f4327d4c794586244626363704fe2cff 100644 (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)
           {
index 3ada19532722a0c65d3c8878f778208f35ea3958..d324c4b3f32e62552edafc3248e26df093fca424 100644 (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");
+touch("example.1");
+touch("example.two");
+touch("example.3");
+touch("example.for");
+touch("example._");
 
-# The Contents of the MAKEFILE ...
+# TEST #1
+# -------
 
-print MAKEFILE <<EOM;
+run_make_test(qq/
 .PHONY: print1 print2 clean
-print1: ;\@echo \$(sort \$(wildcard example.*))
+print1: ;\@echo \$(wildcard example.*)
 print2:
-\t\@echo \$(sort \$(wildcard example.?))
-\t\@echo \$(sort \$(wildcard example.[a-z0-9]))
-\t\@echo \$(sort \$(wildcard example.[!A-Za-z_\\!]))
+\t\@echo \$(wildcard example.?)
+\t\@echo \$(wildcard example.[a-z0-9])
+\t\@echo \$(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._");
-
-# 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));
-
+\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