build system: protect digest calls from re-entry

The code for Ruby's Digest module seems to be racy
wrt. multi-threading. See e.g.
https://github.com/aws/aws-sdk-ruby/issues/525 for details.
This commit is contained in:
Moritz Bunkus 2018-12-04 21:13:17 +01:00
parent 7b9abff716
commit d6707da459
No known key found for this signature in database
GPG Key ID: 74AF00ADF2E32C85
3 changed files with 9 additions and 3 deletions

View File

@ -47,6 +47,7 @@ $build_system_modules = {}
$have_gtest = (c(:GTEST_TYPE) == "system") || (c(:GTEST_TYPE) == "internal")
$gtest_apps = []
require_relative "rake.d/digest"
require_relative "rake.d/helpers"
require_relative "rake.d/target"
require_relative "rake.d/application"

7
rake.d/digest.rb Normal file
View File

@ -0,0 +1,7 @@
require "digest"
$digest_mutex = Mutex.new
def sha1_hexdigest data
$digest_mutex.synchronize { Digest::SHA1.hexdigest(data) }
end

View File

@ -1,7 +1,5 @@
#!/usr/bin/env ruby
require "digest"
class FormatStringVerifier
def verify file_name
language = file_name.gsub(%r{.*/|\.po$}, '')
@ -35,7 +33,7 @@ class FormatStringVerifier
reject(&:nil?).
each do |msgid|
format_types.each do |type|
sha1 = Digest::SHA1.hexdigest "#{type}:#{msgid}:#{msgstr}"
sha1 = sha1_hexdigest "#{type}:#{msgid}:#{msgstr}"
next if to_ignore.key?(language) && to_ignore[language].include?(sha1)