Bug#727226: [PATCH] cvsserver: Determinize output to combat Perl 5.18 hash randomization

2013-10-30 Thread Anders Kaseorg
Perl 5.18 randomizes the seed used by its hash function, so iterating
through hashes results in different orders from run to run:
  http://perldoc.perl.org/perl5180delta.html#Hash-overhaul

This usually broke t9400 (gitcvs.dbname, gitcvs.ext.dbname, when
running cmp on two .sqlite files) and t9402 (check [cvswork3] diff,
when running test_cmp on two diffs).

To fix this, hide the internal order of hashes with sort when sending
output or running database queries.

(An alternative workaround is PERL_HASH_SEED=0, but this seems nicer.)

Signed-off-by: Anders Kaseorg ande...@mit.edu
---
 git-cvsserver.perl | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/git-cvsserver.perl b/git-cvsserver.perl
index 67b1e7b..6177f4a 100755
--- a/git-cvsserver.perl
+++ b/git-cvsserver.perl
@@ -430,10 +430,10 @@ sub req_validrequests
 
 $log-debug(req_validrequests);
 
-$log-debug(SEND : Valid-requests  . join( ,keys %$methods));
+$log-debug(SEND : Valid-requests  . join( ,sort keys %$methods));
 $log-debug(SEND : ok);
 
-print Valid-requests  . join( ,keys %$methods) . \n;
+print Valid-requests  . join( ,sort keys %$methods) . \n;
 print ok\n;
 }
 
@@ -2124,7 +2124,7 @@ sub req_diff
 print M retrieving revision $meta2-{revision}\n
 }
 print M diff ;
-foreach my $opt ( keys %{$state-{opt}} )
+foreach my $opt ( sort keys %{$state-{opt}} )
 {
 if ( ref $state-{opt}{$opt} eq ARRAY )
 {
@@ -4050,7 +4050,7 @@ sub update
 close FILELIST;
 
 # Detect deleted files
-foreach my $file ( keys %$head )
+foreach my $file ( sort keys %$head )
 {
 unless ( exists $seen_files-{$file} or 
$head-{$file}{filehash} eq deleted )
 {
@@ -4078,7 +4078,7 @@ sub update
 }
 
 $self-delete_head();
-foreach my $file ( keys %$head )
+foreach my $file ( sort keys %$head )
 {
 $self-insert_head(
 $file,
-- 
1.8.4.1


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#727226: [PATCH] cvsserver: Determinize output to combat Perl 5.18 hash randomization

2013-10-30 Thread Junio C Hamano
Anders Kaseorg ande...@mit.edu writes:

 Perl 5.18 randomizes the seed used by its hash function, so iterating
 through hashes results in different orders from run to run:
   http://perldoc.perl.org/perl5180delta.html#Hash-overhaul

 This usually broke t9400 (gitcvs.dbname, gitcvs.ext.dbname, when
 running cmp on two .sqlite files) and t9402 (check [cvswork3] diff,
 when running test_cmp on two diffs).

 To fix this, hide the internal order of hashes with sort when sending
 output or running database queries.

 (An alternative workaround is PERL_HASH_SEED=0, but this seems nicer.)

 Signed-off-by: Anders Kaseorg ande...@mit.edu

Thanks, will queue.

 ---
  git-cvsserver.perl | 10 +-
  1 file changed, 5 insertions(+), 5 deletions(-)

 diff --git a/git-cvsserver.perl b/git-cvsserver.perl
 index 67b1e7b..6177f4a 100755
 --- a/git-cvsserver.perl
 +++ b/git-cvsserver.perl
 @@ -430,10 +430,10 @@ sub req_validrequests
  
  $log-debug(req_validrequests);
  
 -$log-debug(SEND : Valid-requests  . join( ,keys %$methods));
 +$log-debug(SEND : Valid-requests  . join( ,sort keys %$methods));
  $log-debug(SEND : ok);
  
 -print Valid-requests  . join( ,keys %$methods) . \n;
 +print Valid-requests  . join( ,sort keys %$methods) . \n;
  print ok\n;
  }
  
 @@ -2124,7 +2124,7 @@ sub req_diff
  print M retrieving revision $meta2-{revision}\n
  }
  print M diff ;
 -foreach my $opt ( keys %{$state-{opt}} )
 +foreach my $opt ( sort keys %{$state-{opt}} )
  {
  if ( ref $state-{opt}{$opt} eq ARRAY )
  {
 @@ -4050,7 +4050,7 @@ sub update
  close FILELIST;
  
  # Detect deleted files
 -foreach my $file ( keys %$head )
 +foreach my $file ( sort keys %$head )
  {
  unless ( exists $seen_files-{$file} or 
 $head-{$file}{filehash} eq deleted )
  {
 @@ -4078,7 +4078,7 @@ sub update
  }
  
  $self-delete_head();
 -foreach my $file ( keys %$head )
 +foreach my $file ( sort keys %$head )
  {
  $self-insert_head(
  $file,


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org