Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-6-1]: src/usr.bin/ftp Pull up following revision(s) (requested by...



details:   https://anonhg.NetBSD.org/src/rev/2269548bc2f4
branches:  netbsd-6-1
changeset: 775999:2269548bc2f4
user:      snj <snj%NetBSD.org@localhost>
date:      Mon Oct 27 05:57:54 2014 +0000

description:
Pull up following revision(s) (requested by christos in ticket #1175):
        usr.bin/ftp/fetch.c: revision 1.206 via patch
don't pay attention to special characters if they don't come from the command
line (from jmcneill)

diffstat:

 usr.bin/ftp/fetch.c |  40 +++++++++++++++++++++++++---------------
 1 files changed, 25 insertions(+), 15 deletions(-)

diffs (76 lines):

diff -r 0b902657fed5 -r 2269548bc2f4 usr.bin/ftp/fetch.c
--- a/usr.bin/ftp/fetch.c       Sun Oct 26 19:59:45 2014 +0000
+++ b/usr.bin/ftp/fetch.c       Mon Oct 27 05:57:54 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fetch.c,v 1.195 2011/12/10 05:53:58 lukem Exp $        */
+/*     $NetBSD: fetch.c,v 1.195.8.1 2014/10/27 05:57:54 snj Exp $      */
 
 /*-
  * Copyright (c) 1997-2009 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: fetch.c,v 1.195 2011/12/10 05:53:58 lukem Exp $");
+__RCSID("$NetBSD: fetch.c,v 1.195.8.1 2014/10/27 05:57:54 snj Exp $");
 #endif /* not lint */
 
 /*
@@ -541,7 +541,7 @@
        url_decode(decodedpath);
 
        if (outfile)
-               savefile = ftp_strdup(outfile);
+               savefile = outfile;
        else {
                cp = strrchr(decodedpath, '/');         /* find savefile */
                if (cp != NULL)
@@ -1081,18 +1081,27 @@
                }
        }               /* end of ftp:// or http:// specific setup */
 
-                       /* Open the output file. */
-       if (strcmp(savefile, "-") == 0) {
-               fout = stdout;
-       } else if (*savefile == '|') {
-               oldintp = xsignal(SIGPIPE, SIG_IGN);
-               fout = popen(savefile + 1, "w");
-               if (fout == NULL) {
-                       warn("Can't execute `%s'", savefile + 1);
-                       goto cleanup_fetch_url;
+       /* Open the output file. */
+ 
+       /* 
+        * Only trust filenames with special meaning if they came from 
+        * the command line
+        */
+
+       if (outfile == savefile) {
+               if (strcmp(savefile, "-") == 0) {
+                       fout = stdout;
+               } else if (*savefile == '|') {
+                       oldintp = xsignal(SIGPIPE, SIG_IGN);
+                       fout = popen(savefile + 1, "w");
+                       if (fout == NULL) {
+                               warn("Can't execute `%s'", savefile + 1);
+                               goto cleanup_fetch_url;
+                       }
+                       closefunc = pclose;
                }
-               closefunc = pclose;
-       } else {
+       }
+       if (fout == NULL) {
                if ((rangeend != -1 && rangeend <= restart_point) ||
                    (rangestart == -1 && filesize != -1 && filesize <= restart_point)) {
                        /* already done */
@@ -1303,7 +1312,8 @@
                (*closefunc)(fout);
        if (res0)
                freeaddrinfo(res0);
-       FREEPTR(savefile);
+       if (savefile != outfile)
+               FREEPTR(savefile);
        FREEPTR(uuser);
        if (pass != NULL)
                memset(pass, 0, strlen(pass));



Home | Main Index | Thread Index | Old Index