Projects

Ticket #55 (closed defect: wontfix)

Opened 4 years ago

Last modified 4 years ago

NSAppleScript#executeAndReturnError causes a SEGFAULT.

Reported by: eloy.de.enige@… Owned by: lsansonetti@…
Priority: minor Milestone:
Component: MacRuby Keywords: bug
Cc:

Description

Coincidentally I had the same problem recently with RubyCocoa, but there a NoMethodError is raised. In MacRuby it causes a SEGFAULT (*). If I use performSelector:'executeAndReturnError:', withObject:nil it works and the equivalent works in RC too, so it might be something with BridgeSupport.

*:

irb(main):003:0> NSAppleScript.alloc.initWithSource("say \"hello world\"").executeAndReturnError(nil)
(irb):3: [BUG] Segmentation fault
MacRuby version 0.2 (ruby 1.9.0 2008-03-01) [universal-darwin9.0]

-- control frame ----------
c:0024 p:---- s:0074 b:0074 l:000073 d:000073 CFUNC  :executeAndReturnError:
c:0023 p:0028 s:0070 b:0070 l:000ae4 d:000069 EVAL   (irb):3
c:0022 p:---- s:0069 b:0069 l:000068 d:000068 FINISH :empty?
c:0021 p:---- s:0067 b:0067 l:000066 d:000066 CFUNC  :eval
c:0020 p:0023 s:0060 b:0060 l:000059 d:000059 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/workspace.rb:80
c:0019 p:0025 s:0053 b:0052 l:000051 d:000051 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/context.rb:218
c:0018 p:0024 s:0047 b:0047 l:001954 d:000046 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:149
c:0017 p:0025 s:0040 b:0040 l:000039 d:000039 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:262
c:0016 p:0009 s:0035 b:0035 l:001954 d:000034 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:146
c:0015 p:0093 s:0032 b:0032 l:000021 d:000031 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:243
c:0014 p:---- s:0032 b:0032 l:000031 d:000031 FINISH :block_given?
c:0013 p:---- s:0030 b:0030 l:000029 d:000029 CFUNC  :loop
c:0012 p:0007 s:0027 b:0027 l:000021 d:000026 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:230
c:0011 p:---- s:0028 b:0028 l:000027 d:000027 FINISH :each
c:0010 p:---- s:0026 b:0026 l:000025 d:000025 CFUNC  :catch
c:0009 p:0017 s:0022 b:0022 l:000021 d:000021 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:229
c:0008 p:0034 s:0019 b:0019 l:001954 d:001954 METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:145
c:0007 p:0009 s:0016 b:0016 l:00185c d:000015 BLOCK  /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:69
c:0006 p:---- s:0017 b:0017 l:000016 d:000016 FINISH :(null)
c:0005 p:---- s:0015 b:0015 l:000014 d:000014 CFUNC  :catch
c:0004 p:0152 s:0011 b:0011 l:00185c d:00185c METHOD /Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:68
c:0003 p:0033 s:0006 b:0006 l:000005 d:000005 TOP    /usr/local/bin/macirb:12
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH :inherited
c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP    
---------------------------
DBG> : "(irb):3:in `irb_binding'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/workspace.rb:80:in `eval'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/workspace.rb:80:in `evaluate'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/context.rb:218:in `evaluate'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:149:in `block (2 levels) in eval_input'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:262:in `signal_status'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:146:in `block in eval_input'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:243:in `block (2 levels) in each_top_level_statement'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:230:in `loop'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:230:in `block in each_top_level_statement'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:229:in `catch'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb/ruby-lex.rb:229:in `each_top_level_statement'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:145:in `eval_input'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:69:in `block in start'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:68:in `catch'"
DBG> : "/Library/Frameworks/MacRuby.framework/Versions/0.2/usr/lib/ruby/1.9.0/irb.rb:68:in `start'"
DBG> : "/usr/local/bin/macirb:12:in `<main>'"
-- backtrace of native function call (Use addr2line) --
0x2a4ca6
0x1dab8c
0x1dabcb
0x263dc1
0x953e55eb
0xffffffff
0x954deab7
0x954e3055
0x94a8150
0x948cbec
0x920e0cb8
0x9487ae2
0x94a3927
0x9209b5cd
0x91172513
0x91e8cdaf
0x91e8d096
0x91e8ce51
0x900041dd
0x90004771
0x2b01f7
0x2a2f70
0x29cec8
0x2a241c
0x1e65f7
0x1e6ace
0x295855
0x2a2f70
0x29cec8
0x2a241c
0x1debea
0x1deca9
0x1dee07
0x2a2f70
0x29cec8
0x2a241c
0x1e0b00
0x295855
0x2a2f70
0x29cec8
0x2a241c
0x1e0b00
0x295855
0x2a2f70
0x29cec8
0x2a241c
0x2a26f1
0x1de8aa
0x1e425f
0x1fdf
0x1f46
0x2
-------------------------------------------------------
^Czsh: abort      macirb

Change History

Changed 4 years ago by lsansonetti@…

  • status changed from new to closed
  • resolution set to wontfix

It looks like a bug in NSAppleScript, which doesn't work in GC mode.

$ cat t.m
#import <Foundation/Foundation.h>
int main(void)
{
    [[[NSAppleScript alloc] initWithSource:@"say \"hello world\""] executeAndReturnError:nil];
    sleep(5);
    return 0;
}

$ gcc t.m -o t -framework Foundation -fobjc-gc

$ ./t # boom

Doesn't reproduce when -fobjc-gc is omitted.

I filed < rdar://problem/5958648> NSAppleScript crashes in GC mode

Note: See TracTickets for help on using tickets.