New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
:rubyfile を実行中に例外が発生すると、segmentation fault する #1098
Comments
同じくarchlinuxです。
(Gentoo Linuxでもざっとみたところ再現を確認) |
いま成瀬さんに尋ねてますが、vim に関係なく落ちる模様。 https://gist.github.com/mattn/a657837cb83db0077f705755f34b4cab |
ruby側の根本原因はわかってないけど、これで直ることは確認できました。 diff --git a/src/if_ruby.c b/src/if_ruby.c
index c1b42e675..a40901bbf 100644
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -831,7 +831,7 @@ void ex_rubyfile(exarg_T *eap)
if (ensure_ruby_initialized())
{
- rb_load_protect(rb_str_new2((char *) eap->arg), 0, &state);
+ rb_protect((VALUE (*)(VALUE))rb_load, rb_str_new2((char *) eap->arg), &state);
if (state) error_print(state);
}
}
とのことなので、むしろこっちの方がよさそう感 |
おっ!初 contribute ? |
(/// |
こんなのを testdir/test_ruby.vim に足せばよいかと。 func Test_rubyfile()
let tempfile = tempname() . '.rb'
call writefile(['raise "vim!"'], tempfile)
call assert_fails('rubyfile ' . tempfile)
call delete(tempfile)
endfunc |
出来れば assert_fails の第2引数でエラーがチェック出来ればいいけど。 |
あ、再現テストは普通に状況説明でいいかと。 |
@ujihisa あとは pull-req までお願いしていいですか? |
おお、それでやっておきます! @mattn++ |
ありがとうございます 🙏 |
なぜか 8.0.1236 の一部として取り込まれていたので、意図的なのか確認中。 |
(slackにも書いたけど本件謎が多い...!) |
事故で取り込まれてしまったとのことでしたが、パッチファイルのコメントが更新されて、一応公式なものとなりました。 |
最終的に根本解決がだいぶ前に入ったのでこれも閉じ |
質問・報告の内容
:rubyfile
を実行中に例外が発生すると、segmentation fault します再現手順
test.rb
として置くraise
vim を起動
:rubyfile ./test.rb
を実行するなお、
:ruby raise
を実行してもE272: Unhandled exception
が出るだけで、segmentation fault はしません(rubyfile
を使用したときのみ再現します)。他の言語について
Python で試しましたが、segmentation fault はせず、エラーメッセージが表示されました。
ruby, python 以外の言語では試せていないです。
期待する挙動
segmentation fault ではなく、(pythonの例のように)何らかのエラーメッセージが出る、などの挙動を期待しています。
何故ならば、segmentation fault されるとデバッグが困難だからです(どのようなエラーが起きたかすらわからない)
Vimのバージョン
OSの種類/ディストリ/バージョン
使用している or 関係していそうなプラグイン
vim -u NONE
で再現したので、プラグインは特に関係はないと思いますその他
Ruby のバージョン
The text was updated successfully, but these errors were encountered: