[MacRuby] #850: File.basename is broken when calls the File.basename("..", ".*").

MacRuby ruby-noreply at macosforge.org
Mon Aug 16 07:30:53 PDT 2010


#850: File.basename is broken when calls the File.basename("..", ".*").
----------------------------------+-----------------------------------------
 Reporter:  watson1978@…          |       Owner:  lsansonetti@…        
     Type:  defect                |      Status:  new                  
 Priority:  blocker               |   Milestone:                       
Component:  MacRuby               |    Keywords:                       
----------------------------------+-----------------------------------------
 Test Script:
 {{{
 #!ruby
 $ cat test.rb
 p File.basename("..")
 p File.basename("..", "test")
 p File.basename("..", "*")
 p File.basename("..", ".*")
 }}}

 Result of Ruby 1.9.1:
 {{{
 $ ruby test.rb
 ".."
 ".."
 ".."
 ".."
 }}}

 Result of MacRuby Trunk:
 {{{
 $ macruby test.rb
 ".."
 ".."
 ".."
 "."
 }}}

 It seems that Implementation of the rmext() is not enough.[[BR]]
 Merged from Ruby 1.9:
 {{{
 #!diff
 diff --git a/file.c b/file.c
 index 2714476..4e62411 100644
 --- a/file.c
 +++ b/file.c
 @@ -2615,16 +2615,19 @@ rb_file_s_realdirpath(VALUE klass, SEL sel, int
 argc, VALUE
  static int
  rmext(const char *p, int l1, const char *e)
  {
 -    int l2;
 +    int l0, l2;

      if (!e) return 0;

 +    for (l0 = 0; l0 < l1; ++l0) {
 +       if (p[l0] != '.') break;
 +    }
      l2 = strlen(e);
      if (l2 == 2 && e[1] == '*') {
         unsigned char c = *e;
         e = p + l1;
         do {
 -           if (e <= p) return 0;
 +           if (e <= p + l0) return 0;
         } while (*--e != c);
         return e - p;
      }
 }}}

-- 
Ticket URL: <http://www.macruby.org/trac/ticket/850>
MacRuby <http://macruby.org/>



More information about the macruby-tickets mailing list