From: noreply@... Date: 2004-11-24T23:49:16+09:00 Subject: [ ruby-Bugs-1095 ] current ruby 1.8.2 cvs has inconsistent string handling (null char in string error) Bugs item #1095, was opened at 2004-11-24 16:48 You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=1698&aid=1095&group_id=426 Category: Core Group: None Status: Open Resolution: None Priority: 5 Submitted By: Ville Mattila (mulperi) Assigned to: Nobody (None) Summary: current ruby 1.8.2 cvs has inconsistent string handling (null char in string error) Initial Comment: Here are the info: 16:46 > cat foo.rb def self.search_loadpath(file) p file result = Dir.glob("{#{($LOAD_PATH).join(',')}}/#{file}{,.rb,.so}") p result result.delete_if {|f| p f;File.directory?(f)}.size > 0 result end search_loadpath("openssl.so") 16:46 > ruby foo.rb "openssl.so" ["/sb/tb/toolbox3/sparc-sun-solaris2.5.1/lib/ruby/1.8/sparc-solaris2.8/openssl.so"] "/sb/tb/toolbox3/sparc-sun-solaris2.5.1/lib/ruby/1.8/sparc-solaris2.8/openssl.so" foo.rb:5:in `directory?': string contains null byte (ArgumentError) from foo.rb:5:in `search_loadpath' from foo.rb:5:in `delete_if' from foo.rb:5:in `search_loadpath' from foo.rb:8 16:46 > ruby -v ruby 1.8.2 (2004-11-24) [sparc-solaris2.8] with a little bit debugging added to string.c I get "openssl.so" ["/sb/tb/toolbox3/sparc-sun-solaris2.5.1/lib/ruby/1.8/sparc-solaris2.8/openssl.so"] "/sb/tb/toolbox3/sparc-sun-solaris2.5.1/lib/ruby/1.8/sparc-solaris2.8/openssl.so" string is /sb/tb/toolbox3/sparc-sun-solaris2.5.1/lib/ruby/1.8/sparc-solaris2.8/openssl.so.so 79 != 82 foo.rb:5:in `directory?': string contains null byte (ArgumentError) from foo.rb:5:in `search_loadpath' from foo.rb:5:in `delete_if' from foo.rb:5:in `search_loadpath' from foo.rb:8 ------ cvs diff -up string.c Index: string.c =================================================================== RCS file: /src/ruby/string.c,v retrieving revision 1.182.2.32 diff -u -p -r1.182.2.32 string.c --- string.c 22 Nov 2004 15:29:49 -0000 1.182.2.32 +++ string.c 24 Nov 2004 14:47:58 -0000 @@ -569,6 +569,7 @@ rb_string_value_cstr(ptr) char *s = RSTRING(str)->ptr; if (!s || RSTRING(str)->len != strlen(s)) { + printf("string is %s %d != %d\n", s ? s : "NULL", RSTRING(str)->len,strlen(s)); rb_raise(rb_eArgError, "string contains null byte"); } return s; ---------------------------------------------------------------------- You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=1698&aid=1095&group_id=426