[DRE-maint] Bug#600713: liblocale-ruby1.8: Locale.current= can't handle non-string params

Martin Hradil martin.hradil at solnet.cz
Tue Oct 19 13:40:23 UTC 2010


Package: liblocale-ruby1.8
Version: 2.0.5-2
Severity: normal

Locale.current= doesn't check the param, so code like

bak = Locale.current
Locale.current = 'C'
#...something that needs locale C
Locale.current = bak
GetText.gettext("string")

fails with the mysterious
#<NoMethodError: undefined method `downcase' for [#<Locale::Tag::Posix: en_US.UTF-8>]:Loca
/usr/lib/ruby/1.8/locale/tag/simple.rb:78:in `initialize'
/usr/lib/ruby/1.8/locale/tag/common.rb:59:in `initialize'
/usr/lib/ruby/1.8/locale/tag/irregular.rb:35:in `new'
/usr/lib/ruby/1.8/locale/tag/irregular.rb:35:in `_unmemoized_convert_to'
/usr/lib/ruby/1.8/locale/util/memoizable.rb:73:in `convert_to'
/usr/lib/ruby/1.8/locale/util/memoizable.rb:87:in `_memoize'
/usr/lib/ruby/1.8/locale/util/memoizable.rb:72:in `convert_to'
(eval):2:in `_unmemoized_to_common'
/usr/lib/ruby/1.8/locale/util/memoizable.rb:73:in `to_common'
/usr/lib/ruby/1.8/locale/util/memoizable.rb:95:in `_memoize_dup'
/usr/lib/ruby/1.8/locale/util/memoizable.rb:87:in `_memoize'
/usr/lib/ruby/1.8/locale/util/memoizable.rb:95:in `_memoize_dup'
/usr/lib/ruby/1.8/locale/util/memoizable.rb:72:in `to_common'
/usr/lib/ruby/1.8/locale.rb:229:in `send'
/usr/lib/ruby/1.8/locale.rb:229:in `collect_candidates'
/usr/lib/ruby/1.8/locale.rb:229:in `collect'
/usr/lib/ruby/1.8/locale.rb:229:in `collect_candidates'
/usr/lib/ruby/1.8/locale.rb:222:in `candidates'
/usr/lib/ruby/1.8/gettext/runtime/textdomain_manager.rb:78:in `each_textdomains'
/usr/lib/ruby/1.8/gettext/runtime/textdomain_manager.rb:102:in `translate_singluar_message
/usr/lib/ruby/1.8/gettext.rb:128:in `gettext'


Because tag/simple.rb:intialize calls
@language = @language.downcase if @language
@region = @region.upcase if @region

expecting them to be strings, but because of the Locale.current = Locale.current, @language is Locale::Tag::Posix .


This simple patch to locale.rb: set_current seems to fix it:

--- /usr/lib/ruby/1.8/locale.rb.bak	2010-10-19 15:38:50.000000000 +0200
+++ /usr/lib/ruby/1.8/locale.rb	2010-10-19 15:39:05.000000000 +0200
@@ -145,7 +145,7 @@
     if tags[0]
       languages = Locale::TagList.new
       tags.each do |tag|
-        languages << create_language_tag(tag)
+        languages << create_language_tag(tag.to_s)
       end
     end
     Thread.current[:current_languages] = languages




-- System Information:
Debian Release: 5.0.6
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 2.6.30-2-686-bigmem (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_US.UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages liblocale-ruby1.8 depends on:
ii  libruby1.8              1.8.7.72-3lenny1 Libraries necessary to run Ruby 1.

liblocale-ruby1.8 recommends no packages.

liblocale-ruby1.8 suggests no packages.

-- no debconf information






More information about the Pkg-ruby-extras-maintainers mailing list