Replace the eval used to pass quoted password in with simpler and safer
bash arrays. Using eval is strongly discouraged as it is error-prone
and confusing.
---
 eclass/cvs.eclass | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/eclass/cvs.eclass b/eclass/cvs.eclass
index 58efcf1aa2b6..c6e5c66cd866 100644
--- a/eclass/cvs.eclass
+++ b/eclass/cvs.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2015 Gentoo Foundation
+# Copyright 1999-2017 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
@@ -353,22 +353,22 @@ cvs_fetch() {
        fi
 
        # Commands to run
-       cmdlogin="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_pass}\" login"
-       cmdupdate="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" update 
${ECVS_UP_OPTS} ${ECVS_LOCALNAME}"
-       cmdcheckout="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" 
checkout ${ECVS_CO_OPTS} ${ECVS_MODULE}"
+       cmdlogin=( ${run} ${ECVS_CVS_COMMAND} -d "${cvsroot_pass}" login )
+       cmdupdate=( ${run} ${ECVS_CVS_COMMAND} -d "${cvsroot_nopass}" update 
${ECVS_UP_OPTS} ${ECVS_LOCALNAME} )
+       cmdcheckout=( ${run} ${ECVS_CVS_COMMAND} -d "${cvsroot_nopass}" 
checkout ${ECVS_CO_OPTS} ${ECVS_MODULE} )
 
        # Execute commands
 
        cd "${ECVS_TOP_DIR}"
        if [[ ${ECVS_AUTH} == "pserver" ]] ; then
-               einfo "Running ${cmdlogin}"
-               eval ${cmdlogin} || die "cvs login command failed"
+               einfo "Running ${cmdlogin[*]}"
+               "${cmdlogin[@]}" || die "cvs login command failed"
                if [[ ${mode} == "update" ]] ; then
-                       einfo "Running ${cmdupdate}"
-                       eval ${cmdupdate} || die "cvs update command failed"
+                       einfo "Running ${cmdupdate[*]}"
+                       "${cmdupdate[@]}" || die "cvs update command failed"
                elif [[ ${mode} == "checkout" ]] ; then
-                       einfo "Running ${cmdcheckout}"
-                       eval ${cmdcheckout} || die "cvs checkout command failed"
+                       einfo "Running ${cmdcheckout[*]}"
+                       "${cmdcheckout[@]}" || die "cvs checkout command failed"
                fi
        elif [[ ${ECVS_AUTH} == "ext" || ${ECVS_AUTH} == "no" ]] ; then
                # Hack to support SSH password authentication
@@ -462,11 +462,11 @@ EOF
                fi
 
                if [[ ${mode} == "update" ]] ; then
-                       einfo "Running ${cmdupdate}"
-                       eval ${cmdupdate} || die "cvs update command failed"
+                       einfo "Running ${cmdupdate[*]}"
+                       "${cmdupdate[@]}" || die "cvs update command failed"
                elif [[ ${mode} == "checkout" ]] ; then
-                       einfo "Running ${cmdcheckout}"
-                       eval ${cmdcheckout} || die "cvs checkout command failed"
+                       einfo "Running ${cmdcheckout[*]}"
+                       "${cmdcheckout[@]}" || die "cvs checkout command failed"
                fi
 
                # Restore environment variable values
-- 
2.11.1


Reply via email to