Patch 8.0.1448
Problem:    Segmentation fault when Ruby throws an exception inside :rubyfile
            command.
Solution:   Use rb_protect() instead of rb_load_protect(). (ujihisa,
            closes #2147, greywolf, closes #2512, #2511)
Files:      src/if_ruby.c, src/testdir/test_ruby.vim


*** ../vim-8.0.1447/src/if_ruby.c       2017-10-28 21:08:38.983456981 +0200
--- src/if_ruby.c       2018-01-31 20:14:28.120021843 +0100
***************
*** 377,383 ****
  # endif
  static VALUE (*dll_rb_lastline_get) (void);
  static void (*dll_rb_lastline_set) (VALUE);
! static void (*dll_rb_protect) (VALUE (*)(VALUE), int, int*);
  static void (*dll_rb_load) (VALUE, int);
  static long (*dll_rb_num2long) (VALUE);
  static unsigned long (*dll_rb_num2ulong) (VALUE);
--- 377,383 ----
  # endif
  static VALUE (*dll_rb_lastline_get) (void);
  static void (*dll_rb_lastline_set) (VALUE);
! static VALUE (*dll_rb_protect) (VALUE (*)(VALUE), VALUE, int*);
  static void (*dll_rb_load) (VALUE, int);
  static long (*dll_rb_num2long) (VALUE);
  static unsigned long (*dll_rb_num2ulong) (VALUE);
***************
*** 828,842 ****
      }
  }
  
  void ex_rubyfile(exarg_T *eap)
  {
      int state;
  
      if (ensure_ruby_initialized())
      {
!       rb_protect((VALUE (*)(VALUE))rb_load, rb_str_new2((char *)eap->arg),
!                                                                      &state);
!       if (state) error_print(state);
      }
  }
  
--- 828,849 ----
      }
  }
  
+ VALUE rb_load_wrap(VALUE file_to_load)
+ {
+     rb_load(file_to_load, 0);
+     return Qnil;
+ }
+ 
  void ex_rubyfile(exarg_T *eap)
  {
      int state;
  
      if (ensure_ruby_initialized())
      {
!       VALUE file_to_load = rb_str_new2((const char *)eap->arg);
!       rb_protect(rb_load_wrap, file_to_load, &state);
!       if (state)
!           error_print(state);
      }
  }
  
*** ../vim-8.0.1447/src/testdir/test_ruby.vim   2017-01-29 23:11:21.172512839 
+0100
--- src/testdir/test_ruby.vim   2018-01-31 20:11:21.429219954 +0100
***************
*** 49,51 ****
--- 49,59 ----
    bwipe!
    bwipe!
  endfunc
+ 
+ func Test_rubyfile()
+   " Check :rubyfile does not SEGV with Ruby level exception but just fails
+   let tempfile = tempname() . '.rb'
+   call writefile(['raise "vim!"'], tempfile)
+   call assert_fails('rubyfile ' . tempfile)
+   call delete(tempfile)
+ endfunc
*** ../vim-8.0.1447/src/version.c       2018-01-31 19:30:04.576336397 +0100
--- src/version.c       2018-01-31 20:14:50.051878051 +0100
***************
*** 773,774 ****
--- 773,776 ----
  {   /* Add new patch number below this line */
+ /**/
+     1448,
  /**/

-- 
The greatest lies of all time:
  (1) The check is in the mail.
  (2) We have a really challenging assignment for you.
  (3) I love you.
  (4) All bugs have been fixed.
  (5) This won't hurt a bit.
  (6) Honey, I just need to debug this program and be home in 5 minutes.
  (7) I have just sent you an e-mail about that.
  (8) Of course I'll respect you in the morning.
  (9) I'm from the government, and I'm here to help you.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui