hchunhui / librime-lua

Extending RIME with Lua scripts
BSD 3-Clause "New" or "Revised" License
309 stars 44 forks source link

在lua_translator中调用env.engine.context中的方法使librime崩溃 #228

Closed bczhc closed 8 months ago

bczhc commented 1 year ago

Lua代码:

local function translator(input, seg, env)
    local context = env.engine.context
    if input:match('^/ps[0-9]$') then
    --    context:clear()
        log.info(input)
    end
end

return translator

当输入 /ps+一位数字时会进到if块中,上面代码是没问题的,但把context:clear()取消注释后,再尝试就会崩溃。 我不知道这个具体和哪边有关,如果是librime的问题的话,再向上游提吧。但这个只在lua_translator中出现,lua_processor中的context就不会。

coredump

Core was generated by `fcitx5'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f513441c5e9 in rime::TagMatching::TagsMatch(rime::Segment*) () from /usr/lib/librime.so.1
[Current thread is 1 (Thread 0x7f513785bcc0 (LWP 1540222))]
(gdb) bt
#0  0x00007f513441c5e9 in rime::TagMatching::TagsMatch(rime::Segment*) () at /usr/lib/librime.so.1
#1  0x00007f51343289c1 in rime::ConcreteEngine::TranslateSegments(rime::Segmentation*) () at /usr/lib/librime.so.1
#2  0x00007f5134328bdb in rime::ConcreteEngine::Compose(rime::Context*) () at /usr/lib/librime.so.1
#3  0x00007f513431d482 in boost::signals2::detail::signal_impl<void (rime::Context*), boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void (rime::Context*)>, boost::function<void (boost::signals2::connection const&, rime::Context*)>, boost::signals2::mutex>::operator()(rime::Context*) () at /usr/lib/librime.so.1
#4  0x00007f5134315e5b in rime::Context::PushInput(char) () at /usr/lib/librime.so.1
#5  0x00007f513443dcf4 in rime::Recognizer::ProcessKeyEvent(rime::KeyEvent const&) () at /usr/lib/librime.so.1
#6  0x00007f513432b70e in rime::ConcreteEngine::ProcessKey(rime::KeyEvent const&) () at /usr/lib/librime.so.1
#7  0x00007f51343051c2 in RimeProcessKey () at /usr/lib/librime.so.1
#8  0x00007f51347dc0b3 in  () at /usr/lib/fcitx5/rime.so
#9  0x00007f5137a98556 in fcitx::Instance::postEvent(fcitx::Event&) const () at /usr/lib/libFcitx5Core.so.7
#10 0x00007f5137abbd16 in fcitx::InputContext::keyEvent(fcitx::KeyEvent&) () at /usr/lib/libFcitx5Core.so.7
#11 0x00007f51369910af in  () at /usr/lib/fcitx5/libdbusfrontend.so
#12 0x00007f5136991d24 in  () at /usr/lib/fcitx5/libdbusfrontend.so
#13 0x00007f51379d2449 in  () at /usr/lib/libFcitx5Utils.so.2
#14 0x00007f51379d817a in  () at /usr/lib/libFcitx5Utils.so.2
#15 0x00007f513736f9bd in  () at /usr/lib/libsystemd.so.0
#16 0x00007f5137385c52 in  () at /usr/lib/libsystemd.so.0
#17 0x00007f5137387a78 in  () at /usr/lib/libsystemd.so.0
#18 0x00007f51373bb884 in  () at /usr/lib/libsystemd.so.0
#19 0x00007f51373bba66 in sd_event_dispatch () at /usr/lib/libsystemd.so.0
#20 0x00007f51373bcf99 in sd_event_run () at /usr/lib/libsystemd.so.0
#21 0x00007f51373bd170 in sd_event_loop () at /usr/lib/libsystemd.so.0
#22 0x00007f51379d6d46 in fcitx::EventLoop::exec() () at /usr/lib/libFcitx5Utils.so.2
#23 0x00007f5137a9b277 in fcitx::Instance::exec() () at /usr/lib/libFcitx5Core.so.7
#24 0x000055b06b3d3050 in  ()
#25 0x00007f513743c290 in  () at /usr/lib/libc.so.6
#26 0x00007f513743c34a in __libc_start_main () at /usr/lib/libc.so.6

librime与librime-lua都是手动编译的最新 librime: 1.8.5 librime-lua: master分支

shewer commented 1 year ago

context:clear() 會改變 input
lua_processor 負責 keyevent 處理 input lua_segmentor 負責 將input 分段打tag lua_translator 負責 將input 轉成 candidate lua_filter 負責 過濾 candidate

bczhc commented 8 months ago

我尝试在processor里实现了。issue先关闭了。:)