[git commit] gzip: do not store timestamp in gzip header

Denys Vlasenko vda.linux at googlemail.com
Mon Feb 2 15:01:16 UTC 2015


commit: http://git.busybox.net/busybox/commit/?id=7f7ade1964f61172125d9f4fe92f0b07ce8bc7a4
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Storing the original file's modification time in the output file is
harmful (precludes deterministic results) and unlike official gzip,
the busybox version provides no way to suppress this behavior; the -n
option is silently ignored. Rather than trying to make -n work, this
patch just removes the timestamp-storing functionality. It should be
considered deprecated anyway; it's not Y2038-safe and gunzip ignores
it by default.

Per RFC 1952, 0 is the correct value to store to indicate that there
is no timestamp.

Signed-off-by: Rich Felker <dalias at libc.org>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 archival/gzip.c |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/archival/gzip.c b/archival/gzip.c
index a93d217..46367f9 100644
--- a/archival/gzip.c
+++ b/archival/gzip.c
@@ -2007,7 +2007,7 @@ static void ct_init(void)
  * IN assertions: the input and output buffers are cleared.
  */
 
-static void zip(ulg time_stamp)
+static void zip(void)
 {
 	ush deflate_flags = 0;  /* pkzip -es, -en or -ex equivalent */
 
@@ -2018,7 +2018,7 @@ static void zip(ulg time_stamp)
 	/* compression method: 8 (DEFLATED) */
 	/* general flags: 0 */
 	put_32bit(0x00088b1f);
-	put_32bit(time_stamp);
+	put_32bit(0);		/* Unix timestamp */
 
 	/* Write deflated file to zip file */
 	G1.crc = ~0;
@@ -2044,8 +2044,6 @@ static void zip(ulg time_stamp)
 static
 IF_DESKTOP(long long) int FAST_FUNC pack_gzip(transformer_state_t *xstate UNUSED_PARAM)
 {
-	struct stat s;
-
 	/* Clear input and output buffers */
 	G1.outcnt = 0;
 #ifdef DEBUG
@@ -2077,9 +2075,23 @@ IF_DESKTOP(long long) int FAST_FUNC pack_gzip(transformer_state_t *xstate UNUSED
 	G2.bl_desc.max_length  = MAX_BL_BITS;
 	//G2.bl_desc.max_code    = 0;
 
+#if 0
+	/* Saving of timestamp is disabled. Why?
+	 * - it is not Y2038-safe.
+	 * - some people want deterministic results
+	 *   (normally they'd use -n, but our -n is a nop).
+	 * - it's bloat.
+	 * Per RFC 1952, gzfile.time=0 is "no timestamp".
+	 * If users will demand this to be reinstated,
+	 * implement -n "don't save timestamp".
+	 */
+	struct stat s;
 	s.st_ctime = 0;
 	fstat(STDIN_FILENO, &s);
 	zip(s.st_ctime);
+#else
+	zip();
+#endif
 	return 0;
 }
 


More information about the busybox-cvs mailing list