[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#874102: texlive-bin: please make the PDF IDs reproducible



Source: texlive-bin
Version: 2017.20170613.44572-5
Severity: wishlist
Tags: patch
User: reproducible-builds@lists.alioth.debian.org
Usertags: buildpath toolchain
X-Debbugs-Cc: reproducible-bugs@lists.alioth.debian.org

Hi,

Whilst working on the Reproducible Builds effort [0], we noticed
that texlive-bin was generating PDFs that vary in their "ID" field.

The ID varies because texlive generates it based on the build path
being included in the digest.

For more info, please see:

  http://tug.org/pipermail/tex-live/2017-June/040398.html
  http://tug.org/pipermail/tex-live/2017-July/040419.html
  http://tug.org/pipermail/tex-live/2017-September/040573.html

Patch attached.

 [0] https://reproducible-builds.org/


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby@debian.org / chris-lamb.co.uk
       `-
diff --git a/debian/patches/reproducible-pdf-ids b/debian/patches/reproducible-pdf-ids
new file mode 100644
index 0000000..f1441d6
--- /dev/null
+++ b/debian/patches/reproducible-pdf-ids
@@ -0,0 +1,32 @@
+--- texlive-bin-2017.20170613.44572.orig/texk/web2c/pdftexdir/utils.c
++++ texlive-bin-2017.20170613.44572/texk/web2c/pdftexdir/utils.c
+@@ -707,29 +707,13 @@ void printID(strnumber filename)
+     md5_byte_t digest[16];
+     char id[64];
+     char *file_name;
+-    char pwd[4096];
+     /* start md5 */
+     md5_init(&state);
+     /* get the time */
+     initstarttime();
+     md5_append(&state, (const md5_byte_t *) start_time_str, strlen(start_time_str));
+     /* get the file name */
+-    if (getcwd(pwd, sizeof(pwd)) == NULL)
+-        pdftex_fail("getcwd() failed (%s), path too long?", strerror(errno));
+-#ifdef WIN32
+-    {
+-        char *p;
+-        for (p = pwd; *p; p++) {
+-            if (*p == '\\')
+-                *p = '/';
+-            else if (IS_KANJI(p))
+-                p++;
+-        }
+-    }
+-#endif
+     file_name = makecstring(filename);
+-    md5_append(&state, (const md5_byte_t *) pwd, strlen(pwd));
+-    md5_append(&state, (const md5_byte_t *) "/", 1);
+     md5_append(&state, (const md5_byte_t *) file_name, strlen(file_name));
+     /* finish md5 */
+     md5_finish(&state, digest);
diff --git a/debian/patches/series b/debian/patches/series
index 65b6637..076b59b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -14,3 +14,4 @@ disable-seetex-stdin-tests
 upupstream-xdvi-desktop-file
 mf-xt-fix-expose-events
 fix-gcc7-errors
+reproducible-pdf-ids

Reply to: