https://projects.puppetlabs.com/issues/17010
On Tue, Oct 16, 2012 at 1:33 PM, Andy Parker <[email protected]> wrote: > The "fix" that they committed only seems to make the exception > explicit instead of an accident. So waiting for it won't really fix > this problem > > I'm loath to monkey patch join like this, but it may be the only > option. Can you open a bug against puppet and submit this as a pull > request? It should go in lib/puppet/util/monkey_patches.rb > > On Tue, Oct 16, 2012 at 9:16 AM, Edward Sumerfield > <[email protected]> wrote: > > An improvement on the patch to handle the different types that can be > passed > > into the join. > > > > class File > > class << self > > alias_method :original_join, :join > > end > > > > def self.join(*args) > > new_args = args.collect { |questionableEncoding| > > join_encoding_fix(questionableEncoding) > > } > > self.send(:original_join, new_args) > > end > > > > def self.join_encoding_fix(value) > > if (value.instance_of?(String)) > > value = value.encode("UTF-8") > > elsif (value.instance_of?(Array)) > > value = value.collect { |subValue| > > join_encoding_fix(subValue) > > } > > end > > value > > end > > end > > > > > > > > On Tue, Oct 16, 2012 at 11:43 AM, Edward Sumerfield > > <[email protected]> wrote: > >> > >> Thanks Andy, so to follow up. nobu closed the ticket indicating it was > >> fixed in r37207. However, this is not committed to the 1_9_3 branch and > is > >> only in trunk at the moment. > >> > >> tags: svn log http://svn.ruby-lang.org/repos/ruby/tags/v1_9_3_286 > >> --stop-on-copy > >> ------------------------------------------------------------------------ > >> r37165 | usa | 2012-10-12 05:22:37 -0400 (Fri, 12 Oct 2012) | 1 line > >> > >> Here is a brute force monkey path that might solve the problem until > this > >> fix is released. > >> > >> class File > >> class << self > >> alias_method :original_join, :join > >> end > >> > >> def self.join(*args) > >> new_args = args.collect { |questionableEncoding| > >> questionableEncoding.encode("UTF-8") > >> } > >> self.send(:original_join, new_args) > >> end > >> end > >> > >> > >> > >> > >> On Mon, Oct 15, 2012 at 3:33 PM, Andy Parker <[email protected]> > wrote: > >>> > >>> Looks like this has hit a bug in ruby itself. I've reported it as > >>> https://bugs.ruby-lang.org/issues/7168 > >>> > >>> There might be a workaround that we can do where we force all of the > >>> encodings before we hand over to File.join, but this will probably end > >>> up being a problem in other places as well. > >>> > >>> On Mon, Oct 15, 2012 at 11:44 AM, Edward Sumerfield > >>> <[email protected]> wrote: > >>> > : irb > >>> > irb(main):001:0> require 'win32/dir' > >>> > => true > >>> > irb(main):002:0> Dir::COMMON_APPDATA > >>> > => "C:\\ProgramData" > >>> > irb(main):003:0> Dir::COMMON_APPDATA.encoding > >>> > => #<Encoding:UTF-16LE> > >>> > irb(main):004:0> Dir::COMMON_APPDATA.bytes.to_a > >>> > => [67, 0, 58, 0, 92, 0, 80, 0, 114, 0, 111, 0, 103, 0, 114, 0, 97, > 0, > >>> > 109, > >>> > 0, 68, 0, 97, 0, 116, 0, 97, 0] > >>> > > >>> > > >>> > > >>> > On Mon, Oct 15, 2012 at 12:53 PM, Andy Parker <[email protected]> > >>> > wrote: > >>> >> > >>> >> Hi Edward, > >>> >> > >>> >> what is the output in irb of: > >>> >> > >>> >> require 'win32/dir' > >>> >> Dir::COMMON_APPDATA.encoding > >>> >> Dir::COMMON_APPDATA.bytes.to_a > >>> >> > >>> >> I'm interested where this null byte is in that innocuous looking > >>> >> string. > >>> >> > >>> >> On Sun, Oct 14, 2012 at 6:36 AM, Edward Sumerfield > >>> >> <[email protected]> wrote: > >>> >> > The problem starts with requiring rspec-puppet but ends up in the > >>> >> > puppet > >>> >> > 3.0 > >>> >> > run_mode trying to determine Windows APPDATA pathing. The > >>> >> > Dir::COMMON_APPDATA constant from win32-dir appears to be unicode > >>> >> > which > >>> >> > blows on the File.join call in run_mode line 67 > >>> >> > > >>> >> > : irb > >>> >> > irb(main):001:0> require "rspec-puppet" > >>> >> > Failed to load feature test for root: uninitialized constant > >>> >> > Windows::Synchronize > >>> >> > ArgumentError: string contains null byte > >>> >> > from > >>> >> > > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/puppet-3.0.0/lib/puppet/util/run_mode.rb:67:in > >>> >> > `join' > >>> >> > from > >>> >> > > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/puppet-3.0.0/lib/puppet/util/run_mode.rb:67:in > >>> >> > `conf_dir' > >>> >> > from > >>> >> > > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/puppet-3.0.0/lib/puppet/settings.rb:495:in > >>> >> > `user_config_file' > >>> >> > from > >>> >> > > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/puppet-3.0.0/lib/puppet/settings.rb:1234:in > >>> >> > `which_configuration_file' > >>> >> > from > >>> >> > > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/puppet-3.0.0/lib/puppet/settings.rb:475:in > >>> >> > `parse_config_files' > >>> >> > from > >>> >> > > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/puppet-3.0.0/lib/puppet/settings.rb:147:in > >>> >> > `initialize_global_settings' > >>> >> > > >>> >> > from > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/puppet-3.0.0/lib/puppet.rb:135:in > >>> >> > `do_initialize_settings_for_run_mode' > >>> >> > > >>> >> > from > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/puppet-3.0.0/lib/puppet.rb:123:in > >>> >> > `initialize_settings' > >>> >> > from > >>> >> > > >>> >> > > >>> >> > > C:/ruby193/lib/ruby/gems/1.9.1/gems/rspec-puppet-0.1.5/lib/rspec-puppet.rb:10:in > >>> >> > `<top (required)>' > >>> >> > from > >>> >> > > C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in > >>> >> > `require' > >>> >> > from > >>> >> > > C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in > >>> >> > `rescue > >>> >> > in require' > >>> >> > from > >>> >> > > C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in > >>> >> > `require' > >>> >> > from (irb):1 > >>> >> > from C:/ruby193/bin/irb:12:in `<main>' > >>> >> > > >>> >> > Reproducing the specific line in question in irb like this: > >>> >> > > >>> >> > : irb > >>> >> > irb(main):002:0> require 'win32/dir' > >>> >> > => true > >>> >> > irb(main):003:0> Dir::COMMON_APPDATA > >>> >> > => "C:\\ProgramData" > >>> >> > irb(main):006:0> File.join [Dir::COMMON_APPDATA, "PuppetLabs", > >>> >> > "puppet", > >>> >> > "etc"] > >>> >> > ArgumentError: string contains null byte > >>> >> > from (irb):6:in `join' > >>> >> > from (irb):6 > >>> >> > from C:/ruby193/bin/irb:12:in `<main>' > >>> >> > > >>> >> > > >>> >> > Installed versions: > >>> >> > > >>> >> > : ruby -v > >>> >> > ruby 1.9.3p194 (2012-04-20) [i386-mingw32] > >>> >> > > >>> >> > : gem list > >>> >> > *** LOCAL GEMS *** > >>> >> > ... > >>> >> > facter (1.6.13, 1.6.12) > >>> >> > puppet (3.0.0, 2.7.19) > >>> >> > puppetlabs_spec_helper (0.3.0) > >>> >> > rspec (2.11.0, 2.10.0) > >>> >> > rspec-puppet (0.1.5, 0.1.4) > >>> >> > sys-admin (1.5.6 x86-mingw32) > >>> >> > win32-api (1.4.8 x86-mingw32) > >>> >> > win32-dir (0.4.1) > >>> >> > win32-process (0.7.0) > >>> >> > win32-security (0.1.4, 0.1.3) > >>> >> > win32-service (0.7.2 x86-mingw32) > >>> >> > win32-taskscheduler (0.2.2) > >>> >> > windows-api (0.4.2) > >>> >> > windows-pr (1.2.2) > >>> >> > > >>> >> > Thanks > >>> >> > > >>> >> > Ed Sumerfield > >>> >> > > >>> >> > > >>> >> > -- > >>> >> > You received this message because you are subscribed to the Google > >>> >> > Groups > >>> >> > "Puppet Developers" group. > >>> >> > To post to this group, send email to [email protected]. > >>> >> > To unsubscribe from this group, send email to > >>> >> > [email protected]. > >>> >> > For more options, visit this group at > >>> >> > http://groups.google.com/group/puppet-dev?hl=en. > >>> >> > >>> >> -- > >>> >> You received this message because you are subscribed to the Google > >>> >> Groups > >>> >> "Puppet Developers" group. > >>> >> To post to this group, send email to [email protected]. > >>> >> To unsubscribe from this group, send email to > >>> >> [email protected]. > >>> >> For more options, visit this group at > >>> >> http://groups.google.com/group/puppet-dev?hl=en. > >>> >> > >>> > > >>> > -- > >>> > You received this message because you are subscribed to the Google > >>> > Groups > >>> > "Puppet Developers" group. > >>> > To post to this group, send email to [email protected]. > >>> > To unsubscribe from this group, send email to > >>> > [email protected]. > >>> > For more options, visit this group at > >>> > http://groups.google.com/group/puppet-dev?hl=en. > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > Groups > >>> "Puppet Developers" group. > >>> To post to this group, send email to [email protected]. > >>> To unsubscribe from this group, send email to > >>> [email protected]. > >>> For more options, visit this group at > >>> http://groups.google.com/group/puppet-dev?hl=en. > >>> > >> > > > > -- > > You received this message because you are subscribed to the Google Groups > > "Puppet Developers" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group at > > http://groups.google.com/group/puppet-dev?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Developers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/puppet-dev?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
