git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/7] perl/Git.pm: escape external command's arguments on Windows

From
Gustavo L. de M. Chaves <gnustavo@cpan.org>
Date
Jan 30, 2013, 17:23 UTC
Message-ID
<1359566583-19654-5-git-send-email-gnustavo@cpan.org>
In-Reply-To
<1359566583-19654-1-git-send-email-gnustavo@cpan.org>
From: "Gustavo L. de M. Chaves" <gnustavo@cpan.org>

On Windows, the external git commands are invoked using backticks by Git::activestate_pipe::TIEHANDLE, but there was no attempt to properly quote their arguments. This caused problems with all but the simplest command invokations.

The arguments are now surrounded by quotes and internal quotes are doubled. This is not a complete quoting solution but takes care of some of the most common problems on Windows.

Signed-off-by: Gustavo L. de M. Chaves <gnustavo@cpan.org>
---
 perl/Git.pm | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm
index ef3134b..42c3971 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -1398,12 +1398,10 @@ use strict;
 
 sub TIEHANDLE {
 	my ($class, @params) = @_;
-	# FIXME: This is probably horrible idea and the thing will explode
-	# at the moment you give it arguments that require some quoting,
-	# but I have no ActiveState clue... --pasky
-	# Let's just hope ActiveState Perl does at least the quoting
-	# correctly.
-	my @data = qx{git @params};
+	# FIXME: The quoting done below is not completely right but it
+	# should take care of the most common cases.
+	my @escaped_params = map { "\"$_\"" } map { s/"/""/g; $_ } @params;
+	my @data = qx{git @escaped_params};
 	bless { i => 0, data => \@data, exit => $? }, $class;
 }
 
-- 
1.7.12.464.g83379df.dirty
Previous: Gustavo L. de M. ChavesNext: Gustavo L. de M. Chaves
Message 5 of 9 in “perl/Git.pm: a bunch of fixes for Windows”
  1. 0/7 perl/Git.pm: a bunch of fixes for WindowsGustavo L. de M. Chaves, Jan 30, 2013
  2. 1/7 perl/Git.pm: test portably if a path is absoluteGustavo L. de M. Chaves, Jan 30, 2013
  3. 2/7 perl/Git.pm: set up command environment on WindowsGustavo L. de M. Chaves, Jan 30, 2013
  4. 3/7 perl/Git.pm: fix _cmd_close on WindowsGustavo L. de M. Chaves, Jan 30, 2013
  5. 4/7 perl/Git.pm: escape external command's arguments on WindowsGustavo L. de M. Chaves, Jan 30, 2013
  6. 5/7 perl/Git.pm: simplify Git::activestate_pipeGustavo L. de M. Chaves, Jan 30, 2013
  7. 6/7 perl/Git.pm: make command pipe work in slurp-mode on WindowsGustavo L. de M. Chaves, Jan 30, 2013
  8. 7/7 perl/Git.pm: rename 'ActiveState' to 'Windows'Gustavo L. de M. Chaves, Jan 30, 2013
  9. Junio C HamanoFeb 25, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.