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



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to