[strip-nondeterminism] 02/05: zip.pm: Calculate the target canonical time in just one place.

Chris Lamb chris at chris-lamb.co.uk
Tue Oct 3 13:56:15 UTC 2017


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

lamby pushed a commit to branch master
in repository strip-nondeterminism.

commit 99af63bec965d924275d53f4db90f9853e4db8a7
Author: Chris Lamb <lamby at debian.org>
Date:   Tue Oct 3 14:47:32 2017 +0100

    zip.pm: Calculate the target canonical time in just one place.
---
 lib/File/StripNondeterminism/handlers/zip.pm | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/lib/File/StripNondeterminism/handlers/zip.pm b/lib/File/StripNondeterminism/handlers/zip.pm
index 626569f..7c2cc4d 100644
--- a/lib/File/StripNondeterminism/handlers/zip.pm
+++ b/lib/File/StripNondeterminism/handlers/zip.pm
@@ -91,11 +91,11 @@ sub unixtime_to_winnt($) {
 	return $unixtime + $secondsdiff;
 }
 
-sub normalize_extra_fields($$) {
+sub normalize_extra_fields($$$) {
 	# See http://sources.debian.net/src/zip/3.0-6/proginfo/extrafld.txt for extra field documentation
 	# $header_type is CENTRAL_HEADER or LOCAL_HEADER.
 	# WARNING: some fields have a different format depending on the header type
-	my ($field, $header_type) = @_;
+	my ($canonical_time, $field, $header_type) = @_;
 
 	my $result = "";
 	my $pos = 0;
@@ -110,8 +110,7 @@ sub normalize_extra_fields($$) {
 			# len determines how many timestamps this field contains
 			# this works for both the central header and local header version
 			for (my $i = 1; $i < $len; $i += 4) {
-				$result .= pack("V",
-					$File::StripNondeterminism::canonical_time // SAFE_EPOCH);
+				$result .= pack("V", $canonical_time);
 			}
 		} elsif ($id == 0x000a) {
 			# first 4 bytes are reserved
@@ -192,14 +191,14 @@ sub normalize {
 		and not($options{archive_filter}->($zip))) {
 		return 0;
 	}
+	my $canonical_time = $File::StripNondeterminism::canonical_time;
 	my @filenames = sort $filename_cmp $zip->memberNames();
 	for my $filename (@filenames) {
 		my $member = $zip->removeMember($filename);
 		$zip->addMember($member);
 		$options{member_normalizer}->($member)
 		  if exists $options{member_normalizer};
-		$member->setLastModFileDateTimeFromUnix(
-			$File::StripNondeterminism::canonical_time // SAFE_EPOCH);
+		$member->setLastModFileDateTimeFromUnix($canonical_time);
 		if ($member->fileAttributeFormat() == FA_UNIX) {
 			$member->unixFileAttributes(
 				($member->unixFileAttributes() & oct(100))
@@ -207,9 +206,9 @@ sub normalize {
 				: oct(644));
 		}
 		$member->cdExtraField(
-			normalize_extra_fields($member->cdExtraField(), CENTRAL_HEADER));
+			normalize_extra_fields($canonical_time, $member->cdExtraField(), CENTRAL_HEADER));
 		$member->localExtraField(
-			normalize_extra_fields($member->localExtraField(), LOCAL_HEADER));
+			normalize_extra_fields($canonical_time, $member->localExtraField(), LOCAL_HEADER));
 	}
 	my $old_perms = (stat($zip_filename))[2] & oct(7777);
 	$zip->overwrite();

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



More information about the Reproducible-commits mailing list