aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2007-05-19 02:58:37 -0700
committerJunio C Hamano <junkio@cox.net>2007-05-19 12:26:36 -0700
commit6442754d6cc0056cf5b69b43d218f8b6d317e7f5 (patch)
tree68558fb2cadec798a83ee90c35e33c3f7f254a0d
parent97925fde00743e557fa5e792004483a27e31fbd8 (diff)
downloadgit-6442754d6cc0056cf5b69b43d218f8b6d317e7f5.tar.gz
git-6442754d6cc0056cf5b69b43d218f8b6d317e7f5.tar.xz
git-svn: avoid crashing svnserve when creating new directories
When sorting directory names by depth (slash ("/") count) and closing the deepest directories first (as the protocol requires), we failed to put the root baton (with an empty string as its key "") after top-level directories (which did not have any slashes). This resulted in svnserve being in a situation it couldn't handle and caused a segmentation fault on the remote server. This bug did not affect users of DAV and filesystem repositories. Signed-off-by: Eric Wong <normalperson@yhbt.net> Confirmed-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-xgit-svn.perl2
1 files changed, 2 insertions, 0 deletions
diff --git a/git-svn.perl b/git-svn.perl
index f4c9ff1b8..b87dedc99 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -2841,8 +2841,10 @@ sub close_edit {
my ($self) = @_;
my ($p,$bat) = ($self->{pool}, $self->{bat});
foreach (sort { $b =~ tr#/#/# <=> $a =~ tr#/#/# } keys %$bat) {
+ next if $_ eq '';
$self->close_directory($bat->{$_}, $p);
}
+ $self->close_directory($bat->{''}, $p);
$self->SUPER::close_edit($p);
$p->clear;
}