#950444: intltool: race condition with cache files

Vagrant Cascadian vagrant at reproducible-builds.org
Fri Nov 20 21:08:58 GMT 2020


On 2020-11-15, Vagrant Cascadian wrote:
> On 2020-09-28, Vagrant Cascadian wrote:
>> On 2020-02-01, Vagrant Cascadian wrote:
>>> 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_due_to_intltool_merge_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 submitted a merge request to the gnome-team for the original patch,
>> with some minor typos fixed in the commit message:
>>
>>   https://salsa.debian.org/gnome-team/intltool/-/merge_requests/2
>>
>>
>> While there has been no upstream release of intltool in quite some
>> years, this patch has been in upstream revision control since 2017 (as
>> of now, it is the *only* patch that isn't already in the version in
>> Debian).
>>
>> Please consider merging this patch and uploading, as it should fix
>> reproducibility issues for several other packages. Or would you consider
>> it acceptible to NMU?
>
> I would like to proceed with an NMU in a few days, as this is a
> non-deterministic race condition that affects reproducibility in several
> other packages in Debian, and would be very nice to have resolved in
> time for bullseye. Please let me know if I should hold off.

Uploaded to DELAYED 10.

Merge request:

  https://salsa.debian.org/gnome-team/intltool/-/merge_requests/3

Debdiff:

diff -Nru intltool-0.51.0/debian/changelog intltool-0.51.0/debian/changelog
--- intltool-0.51.0/debian/changelog	2017-12-21 19:23:13.000000000 -0800
+++ intltool-0.51.0/debian/changelog	2020-11-20 12:53:23.000000000 -0800
@@ -1,3 +1,17 @@
+intltool (0.51.0-5.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+
+  [ Jeremy Bicha ]
+  * Update Vcs fields for migration to https://salsa.debian.org/
+
+  [ Vagrant Cascadian ]
+  * 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 (Closes: #950444).
+
+ -- Vagrant Cascadian <vagrant at reproducible-builds.org>  Fri, 20 Nov 2020 12:53:23 -0800
+
 intltool (0.51.0-5) unstable; urgency=medium
 
   * Update Vcs fields for conversion to git
diff -Nru intltool-0.51.0/debian/control intltool-0.51.0/debian/control
--- intltool-0.51.0/debian/control	2017-12-21 19:23:13.000000000 -0800
+++ intltool-0.51.0/debian/control	2020-11-20 12:53:23.000000000 -0800
@@ -1,5 +1,5 @@
 # This file is autogenerated. DO NOT EDIT!
-# 
+#
 # Modifications should be made to debian/control.in instead.
 # This file is regenerated automatically in the clean target.
 Source: intltool
@@ -12,8 +12,8 @@
                perl (>= 5.8.1)
 Build-Depends-Indep: libxml-parser-perl
 Standards-Version: 4.1.2
-Vcs-Git: https://anonscm.debian.org/git/pkg-gnome/intltool.git
-Vcs-Browser: https://anonscm.debian.org/git/pkg-gnome/intltool.git
+Vcs-Browser: https://salsa.debian.org/gnome-team/intltool
+Vcs-Git: https://salsa.debian.org/gnome-team/intltool.git
 Homepage: https://launchpad.net/intltool
 
 Package: intltool
diff -Nru intltool-0.51.0/debian/control.in intltool-0.51.0/debian/control.in
--- intltool-0.51.0/debian/control.in	2017-12-21 19:23:13.000000000 -0800
+++ intltool-0.51.0/debian/control.in	2020-11-20 12:51:46.000000000 -0800
@@ -8,8 +8,8 @@
                perl (>= 5.8.1)
 Build-Depends-Indep: libxml-parser-perl
 Standards-Version: 4.1.2
-Vcs-Git: https://anonscm.debian.org/git/pkg-gnome/intltool.git
-Vcs-Browser: https://anonscm.debian.org/git/pkg-gnome/intltool.git
+Vcs-Browser: https://salsa.debian.org/gnome-team/intltool
+Vcs-Git: https://salsa.debian.org/gnome-team/intltool.git
 Homepage: https://launchpad.net/intltool
 
 Package: intltool
diff -Nru intltool-0.51.0/debian/patches/0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch intltool-0.51.0/debian/patches/0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch
--- intltool-0.51.0/debian/patches/0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch	1969-12-31 16:00:00.000000000 -0800
+++ intltool-0.51.0/debian/patches/0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch	2020-11-20 12:51:46.000000000 -0800
@@ -0,0 +1,57 @@
+From 97c9854c9ffe34d5fb4c8e928530c9a41b8e1a35 Mon Sep 17 00:00:00 2001
+From: "Bernhard M. Wiedemann" <bmwiedemann+bzrcommit at 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 -Nru intltool-0.51.0/debian/patches/series intltool-0.51.0/debian/patches/series
--- intltool-0.51.0/debian/patches/series	2017-12-21 19:23:13.000000000 -0800
+++ intltool-0.51.0/debian/patches/series	2020-11-20 12:51:46.000000000 -0800
@@ -1 +1,2 @@
 perl5.26-regex-fixes.patch
+0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch
diff -Nru intltool-0.51.0/debian/rules intltool-0.51.0/debian/rules
--- intltool-0.51.0/debian/rules	2017-12-21 19:23:13.000000000 -0800
+++ intltool-0.51.0/debian/rules	2020-11-20 12:51:46.000000000 -0800
@@ -1,5 +1,4 @@
 #!/usr/bin/make -f
-
 -include /usr/share/gnome-pkg-tools/1/rules/lp-get-source.mk
 
 %:


live well,
  vagrant
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 227 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/reproducible-builds/attachments/20201120/14328706/attachment.sig>


More information about the Reproducible-builds mailing list