Package: intltool
Version: 0.51.0-5
Severity: normal
Tags: patch
User: reproducible-bui...@lists.alioth.debian.org
Usertags: toolchain randomness
X-Debbugs-Cc: reproducible-b...@lists.alioth.debian.org
Control: affects -1 exo
Control: affects -1 garcon

A fix for a race condition was submitted upstream. The effects result in
partial or completely missing translations. The Reproducible Builds
folks have identified over twenty packages which may be affected:

  
https://tests.reproducible-builds.org/debian/issues/unstable/translations_missing_in_desktop_files_issue.html


The fix was submitted and merged upstream some years ago, but a new
release was never made:

  https://bugs.launchpad.net/intltool/+bug/1687644
  https://bazaar.launchpad.net/~intltool/intltool/trunk/revision/748


I've done several tests building "exo" and "garcon" packages on multiple
machines with varying environments, and the attached patch appears to
work.


Thanks for maintaining intltool!


live well,
  vagrant
From ea5b70f1aae8115595226a9f2e23d3bb2c98bdd4 Mon Sep 17 00:00:00 2001
From: Vagrant Cascadian <vagr...@reproducible-builds.org>
Date: Sat, 1 Feb 2020 10:13:30 -0800
Subject: [PATCH] debian/patches: Add patch from upstream to fix race intltool
 race condition end up using a partial cache, resulting in missing
 translations in some cases.

---
 ...re-some-processes-try-to-use-a-parti.patch | 57 +++++++++++++++++++
 debian/patches/series                         |  1 +
 2 files changed, 58 insertions(+)
 create mode 100644 debian/patches/0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch

diff --git a/debian/patches/0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch b/debian/patches/0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch
new file mode 100644
index 0000000..d5998c9
--- /dev/null
+++ b/debian/patches/0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch
@@ -0,0 +1,57 @@
+From 97c9854c9ffe34d5fb4c8e928530c9a41b8e1a35 Mon Sep 17 00:00:00 2001
+From: "Bernhard M. Wiedemann" <bmwiedemann+bzrcom...@suse.de>
+Date: Thu, 18 May 2017 21:09:18 +0200
+Origin: https://bazaar.launchpad.net/~intltool/intltool/trunk/revision/748
+ https://bugs.launchpad.net/intltool/+bug/1687644
+Subject: [PATCH] Avoid a race where some processes try to use a partial cache
+ file that is still being written to. Note that we release the lock before
+ load_cache, because if we got the lock, the cache is already completely
+ written and it is OK to have multiple parallel readers
+
+Without this patch, translation files would randomly miss translations
+for some or all languages.
+
+fixes bug #1687644
+maybe also bug #986897
+---
+ intltool-merge.in | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/intltool-merge.in b/intltool-merge.in
+index 05db7cf..89923a7 100644
+--- a/intltool-merge.in
++++ b/intltool-merge.in
+@@ -43,6 +43,7 @@ use Getopt::Long;
+ use Text::Wrap;
+ use File::Basename;
+ use Encode;
++use Fcntl qw(:flock);
+ 
+ my $must_end_tag      = -1;
+ my $last_depth        = -1;
+@@ -392,11 +393,14 @@ sub load_cache
+ 
+ sub get_cached_translation_database
+ {
++    open(my $lockfh, ">", "$cache_file.lock") or die $!;
++    flock($lockfh, LOCK_EX) or die "Could not lock '$cache_file.lock' - $!";
+     my $cache_file_age = -M $cache_file;
+     if (defined $cache_file_age) 
+     {
+         if ($cache_file_age <= &get_newest_po_age) 
+         {
++            close($lockfh);
+             &load_cache;
+             return;
+         }
+@@ -404,6 +408,7 @@ sub get_cached_translation_database
+     }
+ 
+     &create_cache;
++    close($lockfh);
+ }
+ 
+ sub add_translation
+-- 
+2.20.1
+
diff --git a/debian/patches/series b/debian/patches/series
index 4ca6c6d..7ccf586 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
 perl5.26-regex-fixes.patch
+0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch
-- 
2.20.1

Attachment: signature.asc
Description: PGP signature

Reply via email to