[Reproducible-builds] [dh-python] 84/183: pybuild: directory paths escaping fixed

Jérémy Bobbio lunar at moszumanska.debian.org
Fri Sep 19 15:30:23 UTC 2014


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch pu/reproducible_builds
in repository dh-python.

commit a617d883f519e924f487cc87f956f1bbaa1735da
Author: Piotr Ożarowski <piotr at debian.org>
Date:   Fri Aug 16 11:54:16 2013 +0200

    pybuild: directory paths escaping fixed
---
 debian/changelog       |  3 ++-
 dh/pybuild.pm          | 28 ++++++++++++++--------------
 dhpython/build/base.py | 12 +++++++++++-
 3 files changed, 27 insertions(+), 16 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 28de53a..5cb638a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-dh-python (1.20130809-1) UNRELEASED; urgency=low
+dh-python (1.20130818-1) UNRELEASED; urgency=low
 
   * Do not translate X-Python{,3}-Version into Depends if there are no Python
     files in the package
@@ -9,6 +9,7 @@ dh-python (1.20130809-1) UNRELEASED; urgency=low
   * pybuild: --test-nose/--test-pytest have higher priority than setup.py's
     test_suite now
   * pybuild.pm: remove .pyc files in clean target
+  * pybuild: directory paths escaping fixed
 
  -- Piotr Ożarowski <piotr at debian.org>  Fri, 09 Aug 2013 15:55:11 +0200
 
diff --git a/dh/pybuild.pm b/dh/pybuild.pm
index 66227ff..302d712 100644
--- a/dh/pybuild.pm
+++ b/dh/pybuild.pm
@@ -46,14 +46,14 @@ sub new {
 sub configure {
 	my $this=shift;
 	foreach my $command ($this->pybuild_commands('configure', @_)) {
-		$this->doit_in_sourcedir($command);
+		$this->doit_in_sourcedir(@$command);
 	}
 }
 
 sub build {
 	my $this=shift;
 	foreach my $command ($this->pybuild_commands('build', @_)) {
-		$this->doit_in_sourcedir($command);
+		$this->doit_in_sourcedir(@$command);
 	}
 }
 
@@ -61,21 +61,21 @@ sub install {
 	my $this=shift;
 	my $destdir=shift;
 	foreach my $command ($this->pybuild_commands('install', @_)) {
-		$this->doit_in_sourcedir("$command --dest-dir '$destdir'");
+		$this->doit_in_sourcedir(@$command, '--dest-dir', $destdir);
 	}
 }
 
 sub test {
 	my $this=shift;
 	foreach my $command ($this->pybuild_commands('test', @_)) {
-		$this->doit_in_sourcedir($command);
+		$this->doit_in_sourcedir(@$command);
 	}
 }
 
 sub clean {
 	my $this=shift;
 	foreach my $command ($this->pybuild_commands('clean', @_)) {
-		$this->doit_in_sourcedir($command);
+		$this->doit_in_sourcedir(@$command);
 	}
 	$this->doit_in_sourcedir('rm', '-rf', '.pybuild/');
 	$this->doit_in_sourcedir('find', '.', '-name', '*.pyc', '-exec', 'rm', '{}', ';');
@@ -106,19 +106,19 @@ sub pybuild_commands {
 		if ($this->{pyvers}) {
 			if (grep {$_ eq 'python-all' or $_ eq 'python-all-dev'} @deps) {
 				$pyall = 1;
-				push @result, "pybuild --$step -i $i -p '$this->{pyvers}' @options";
+				push @result, ['pybuild', "--$step", '-i', $i, '-p', $this->{pyvers}, @options];
 			}
 			if (grep {$_ eq 'python-all-dbg'} @deps) {
 				$pyalldbg = 1;
-				push @result, "pybuild --$step -i $i-dbg -p '$this->{pyvers}' @options";
+				push @result, ['pybuild', "--$step", '-i', "$i-dbg", '-p', $this->{pyvers}, @options];
 			}
 		}
 		if ($this->{pydef}) {
 			if (not $pyall and grep {$_ eq 'python' or $_ eq 'python-dev'} @deps) {
-				push @result, "pybuild --$step -i $i -p '$this->{pydef}' @options";
+				push @result, ['pybuild', "--$step", '-i', $i, '-p', $this->{pydef}, @options];
 			}
 			if (not $pyalldbg and grep {$_ eq 'python-dbg'} @deps) {
-				push @result, "pybuild --$step -i $i-dbg -p '$this->{pydef}' @options";
+				push @result, ['pybuild', "--$step", '-i', "$i-dbg", '-p', $this->{pydef}, @options];
 			}
 		}
 
@@ -127,27 +127,27 @@ sub pybuild_commands {
 			my $i = 'python{version}';
 			if (grep {$_ eq 'python3-all' or $_ eq 'python3-all-dev'} @deps) {
 				$py3all = 1;
-				push @result, "pybuild --$step -i $i -p '$this->{py3vers}' @options";
+				push @result, ['pybuild', "--$step", '-i', $i, '-p', $this->{py3vers}, @options];
 			}
 			if (grep {$_ eq 'python3-all-dbg'} @deps) {
 				$py3alldbg = 1;
-				push @result, "pybuild --$step -i $i-dbg -p'$this->{py3vers}' @options";
+				push @result, ['pybuild', "--$step", '-i', "$i-dbg", '-p', $this->{py3vers}, @options];
 			}
 		}
 		if ($this->{py3def}) {
 			if (not $py3all and grep {$_ eq 'python3' or $_ eq 'python3-dev'} @deps) {
  				# TODO: "python3" case: should X-Python3-Version header in debian/control be also required here?
-				push @result, "pybuild --$step -i $i -p '$this->{py3def}' @options";
+				push @result, ['pybuild', "--$step", '-i', $i, '-p', $this->{py3def}, @options];
 			}
 			if (not $py3alldbg and grep {$_ eq 'python3-dbg'} @deps) {
-				push @result, "pybuild --$step -i $i-dbg -p '$this->{py3def}' @options";
+				push @result, ['pybuild', "--$step", '-i', "$i-dbg", '-p', $this->{py3def}, @options];
 			}
 		}
 		# TODO: pythonX.Y → `pybuild -i python{version} -p X.Y`
 
 		# PyPy
 		if ($this->{pypydef} and grep {$_ eq 'pypy'} @deps) {
-			push @result, "pybuild --$step -i pypy -p '$this->{pypydef}' @options";
+			push @result, ['pybuild', "--$step", '-i', 'pypy', '-p', $this->{pypydef}, @options];
 		}
 	}
 	return @result;
diff --git a/dhpython/build/base.py b/dhpython/build/base.py
index 64e1ad0..c9e0781 100644
--- a/dhpython/build/base.py
+++ b/dhpython/build/base.py
@@ -26,6 +26,12 @@ from os.path import join
 from subprocess import Popen, PIPE
 from shutil import rmtree
 from dhpython.tools import execute
+try:
+    from shlex import quote
+except ImportError:
+    # shlex.quote is new in Python 3.3
+    def quote(s):
+        return ("'" + s.replace("'", "'\"'\"'") + "'") if "'" in s else s
 
 log = logging.getLogger('dhpython')
 
@@ -171,7 +177,11 @@ def shell_command(func):
         else:
             log_file = False
 
-        command = command.format(**args)
+        quoted_args = dict((k, quote(v)) if k in ('dir', 'destdir')
+                           or k.endswith('_dir') else (k, v)
+                           for k, v in args.items())
+        command = command.format(**quoted_args)
+
         output = self.execute(context, args, command, log_file)
         if output['returncode'] != 0:
             msg = 'exit code={}: {}'.format(output['returncode'], command)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/dh-python.git



More information about the Reproducible-builds mailing list