-
-
Notifications
You must be signed in to change notification settings - Fork 6.3k
[WIP] lua/executor.c: fix ASAN issue #6774
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
Closed
Closed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
neovim#6735 (comment) ``` [ RUN ] luaeval(vim.api.…) errors out correctly when working with API: FAIL ...vis/build/neovim/neovim/test/functional/lua/api_spec.lua:158: Expected objects to be the same. Passed in: (nil) Expected: (string) 'Vim(call):E5108: Error while calling lua chunk for luaeval(): [string "<VimL compiled string>"]:1: Cannot convert given lua type' stack traceback: ...vis/build/neovim/neovim/test/functional/lua/api_spec.lua:158: in function <...vis/build/neovim/neovim/test/functional/lua/api_spec.lua:156> ==================== File /home/travis/build/neovim/neovim/build/log/ubsan.12582 ==================== = ================================================================= = ==12582==ERROR: AddressSanitizer: stack-buffer-underflow on address 0x7ffd000b65a0 at pc 0x000001771fe9 bp 0x7ffd000b5290 sp 0x7ffd000b5288 = READ of size 8 at 0x7ffd000b65a0 thread T0 = #0 0x1771fe8 in vim_vsnprintf /home/travis/build/neovim/neovim/src/nvim/strings.c:934:31 = #1 0xfbbe2d in emsgf /home/travis/build/neovim/neovim/src/nvim/message.c:593:3 = #2 0xe6fb9f in nlua_error /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:109:3 = #3 0xe70876 in nlua_eval_lua_string /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:365:5 = #4 0x19d6386 in lj_BC_JFUNCV (/home/travis/build/neovim/neovim/build/bin/nvim+0x19d6386) = #5 0xe6fe6d in executor_eval_lua /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:555:3 = #6 0x8d2bf3 in f_luaeval /home/travis/build/neovim/neovim/src/nvim/eval.c:12093:3 = neovim#7 0x7f1478 in call_func /home/travis/build/neovim/neovim/src/nvim/eval.c:6390:11 = neovim#8 0x806dd4 in get_func_tv /home/travis/build/neovim/neovim/src/nvim/eval.c:6130:11 = neovim#9 0x7ff545 in ex_call /home/travis/build/neovim/neovim/src/nvim/eval.c:2761:9 = neovim#10 0xb686e8 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2241:5 = neovim#11 0xb46de7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:607:20 = neovim#12 0x848b1c in ex_execute /home/travis/build/neovim/neovim/src/nvim/eval.c:19319:7 = neovim#13 0xb686e8 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2241:5 = neovim#14 0xb46de7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:607:20 = neovim#15 0xb4d0f5 in do_cmdline_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:279:10 = neovim#16 0x6501e3 in nvim_command /home/travis/build/neovim/neovim/src/nvim/api/vim.c:52:3 = neovim#17 0x59ea70 in handle_nvim_command /home/travis/build/neovim/neovim/build/src/nvim/auto/api/private/dispatch_wrappers.generated.h:1577:3 = neovim#18 0x1079987 in on_request_event /home/travis/build/neovim/neovim/src/nvim/msgpack_rpc/channel.c:467:19 = neovim#19 0xa62492 in multiqueue_process_events /home/travis/build/neovim/neovim/src/nvim/event/multiqueue.c:150:7 = neovim#20 0x1148e45 in nv_event /home/travis/build/neovim/neovim/src/nvim/normal.c:7905:3 = neovim#21 0x10ec79a in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1137:3 = neovim#22 0x17697a0 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:61:26 = neovim#23 0x10a473b in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:467:3 = neovim#24 0xe78763 in main /home/travis/build/neovim/neovim/src/nvim/main.c:556:3 = neovim#25 0x2adc64c50f44 in __libc_start_main /build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:287 = neovim#26 0x44bef5 in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x44bef5) = = Address 0x7ffd000b65a0 is located in stack of thread T0==12582==AddressSanitizer CHECK failed: /tmp/buildd/llvm-toolchain-3.9-3.9~svn288847/projects/compiler-rt/lib/asan/asan_thread.cc:314 "((ptr[0] == kCurrentStackFrameMagic)) != (0)" (0x0, 0x0) = #0 0x51253f in __asan::AsanCheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/home/travis/build/neovim/neovim/build/bin/nvim+0x51253f) = #1 0x528ed5 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/home/travis/build/neovim/neovim/build/bin/nvim+0x528ed5) = #2 0x515c3d in __asan::AsanThread::GetStackFrameAccessByAddr(unsigned long, __asan::AsanThread::StackFrameAccess*) (/home/travis/build/neovim/neovim/build/bin/nvim+0x515c3d) = #3 0x50c758 in __asan::DescribeAddressIfStack(unsigned long, unsigned long) (/home/travis/build/neovim/neovim/build/bin/nvim+0x50c758) = #4 0x50cd02 in __asan::DescribeAddress(unsigned long, unsigned long, char const*) (/home/travis/build/neovim/neovim/build/bin/nvim+0x50cd02) = #5 0x510f3d in __asan::ReportGenericError(unsigned long, unsigned long, unsigned long, unsigned long, bool, unsigned long, unsigned int, bool) (/home/travis/build/neovim/neovim/build/bin/nvim+0x510f3d) = #6 0x512962 in __asan_report_load8 (/home/travis/build/neovim/neovim/build/bin/nvim+0x512962) = neovim#7 0x1771fe8 in vim_vsnprintf /home/travis/build/neovim/neovim/src/nvim/strings.c:934:31 = neovim#8 0xfbbe2d in emsgf /home/travis/build/neovim/neovim/src/nvim/message.c:593:3 = neovim#9 0xe6fb9f in nlua_error /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:109:3 = neovim#10 0xe70876 in nlua_eval_lua_string /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:365:5 = neovim#11 0x19d6386 in lj_BC_JFUNCV (/home/travis/build/neovim/neovim/build/bin/nvim+0x19d6386) = neovim#12 0xe6fe6d in executor_eval_lua /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:555:3 = neovim#13 0x8d2bf3 in f_luaeval /home/travis/build/neovim/neovim/src/nvim/eval.c:12093:3 = neovim#14 0x7f1478 in call_func /home/travis/build/neovim/neovim/src/nvim/eval.c:6390:11 = neovim#15 0x806dd4 in get_func_tv /home/travis/build/neovim/neovim/src/nvim/eval.c:6130:11 = neovim#16 0x7ff545 in ex_call /home/travis/build/neovim/neovim/src/nvim/eval.c:2761:9 = neovim#17 0xb686e8 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2241:5 = neovim#18 0xb46de7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:607:20 = neovim#19 0x848b1c in ex_execute /home/travis/build/neovim/neovim/src/nvim/eval.c:19319:7 = neovim#20 0xb686e8 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2241:5 = neovim#21 0xb46de7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:607:20 = neovim#22 0xb4d0f5 in do_cmdline_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:279:10 = neovim#23 0x6501e3 in nvim_command /home/travis/build/neovim/neovim/src/nvim/api/vim.c:52:3 = neovim#24 0x59ea70 in handle_nvim_command /home/travis/build/neovim/neovim/build/src/nvim/auto/api/private/dispatch_wrappers.generated.h:1577:3 = neovim#25 0x1079987 in on_request_event /home/travis/build/neovim/neovim/src/nvim/msgpack_rpc/channel.c:467:19 = neovim#26 0xa62492 in multiqueue_process_events /home/travis/build/neovim/neovim/src/nvim/event/multiqueue.c:150:7 = neovim#27 0x1148e45 in nv_event /home/travis/build/neovim/neovim/src/nvim/normal.c:7905:3 = neovim#28 0x10ec79a in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1137:3 = neovim#29 0x17697a0 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:61:26 = neovim#30 0x10a473b in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:467:3 = neovim#31 0xe78763 in main /home/travis/build/neovim/neovim/src/nvim/main.c:556:3 = neovim#32 0x2adc64c50f44 in __libc_start_main /build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:287 = neovim#33 0x44bef5 in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x44bef5) = ===================================================================================================== ./test/helpers.lua:95: assertion failed! stack traceback: ./test/helpers.lua:95: in function 'check_logs' ./test/functional/helpers.lua:654: in function <./test/functional/helpers.lua:653> [ RUN ] luaeval(vim.api.…) accepts any value as API Boolean: 19.19 ms OK [----------] 13 tests from /home/travis/build/neovim/neovim/test/functional/lua/api_spec.lua (581.74 ms total) [----------] Running tests from /home/travis/build/neovim/neovim/test/functional/lua/commands_spec.lua [ RUN ] :lua command works: 4.55 ms OK [ RUN ] :lua command throws catchable errors: FAIL ...uild/neovim/neovim/test/functional/lua/commands_spec.lua:45: Expected objects to be the same. Passed in: (nil) Expected: (string) 'Vim(lua):E5105: Error while calling lua chunk: [string "<VimL compiled string>"]:1: Invalid buffer id' stack traceback: ...uild/neovim/neovim/test/functional/lua/commands_spec.lua:45: in function <...uild/neovim/neovim/test/functional/lua/commands_spec.lua:40> ==================== File /home/travis/build/neovim/neovim/build/log/ubsan.12588 ==================== = ================================================================= = ==12588==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff76cfaa18 at pc 0x000001771009 bp 0x7fff76cf9710 sp 0x7fff76cf9708 = READ of size 4 at 0x7fff76cfaa18 thread T0 = #0 0x1771008 in vim_vsnprintf /home/travis/build/neovim/neovim/src/nvim/strings.c:872:59 = #1 0xfbbe2d in emsgf /home/travis/build/neovim/neovim/src/nvim/message.c:593:3 = #2 0xe6fb9f in nlua_error /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:109:3 = #3 0xe6efed in nlua_exec_lua_string /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:147:5 = #4 0x19d6386 in lj_BC_JFUNCV (/home/travis/build/neovim/neovim/build/bin/nvim+0x19d6386) = #5 0xe6eb52 in executor_exec_lua /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:312:3 = #6 0xe71b48 in ex_lua /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:596:3 = neovim#7 0xb686e8 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2241:5 = neovim#8 0xb46de7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:607:20 = neovim#9 0x848b1c in ex_execute /home/travis/build/neovim/neovim/src/nvim/eval.c:19319:7 = neovim#10 0xb686e8 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2241:5 = neovim#11 0xb46de7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:607:20 = neovim#12 0xb4d0f5 in do_cmdline_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:279:10 = neovim#13 0x6501e3 in nvim_command /home/travis/build/neovim/neovim/src/nvim/api/vim.c:52:3 = neovim#14 0x59ea70 in handle_nvim_command /home/travis/build/neovim/neovim/build/src/nvim/auto/api/private/dispatch_wrappers.generated.h:1577:3 = neovim#15 0x1079987 in on_request_event /home/travis/build/neovim/neovim/src/nvim/msgpack_rpc/channel.c:467:19 = neovim#16 0xa62492 in multiqueue_process_events /home/travis/build/neovim/neovim/src/nvim/event/multiqueue.c:150:7 = neovim#17 0x1148e45 in nv_event /home/travis/build/neovim/neovim/src/nvim/normal.c:7905:3 = neovim#18 0x10ec79a in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1137:3 = neovim#19 0x17697a0 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:61:26 = neovim#20 0x10a473b in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:467:3 = neovim#21 0xe78763 in main /home/travis/build/neovim/neovim/src/nvim/main.c:556:3 = neovim#22 0x2b264fbddf44 in __libc_start_main /build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:287 = neovim#23 0x44bef5 in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x44bef5) = = Address 0x7fff76cfaa18 is located in stack of thread T0==12588==AddressSanitizer CHECK failed: /tmp/buildd/llvm-toolchain-3.9-3.9~svn288847/projects/compiler-rt/lib/asan/asan_thread.cc:314 "((ptr[0] == kCurrentStackFrameMagic)) != (0)" (0x0, 0x0) = #0 0x51253f in __asan::AsanCheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/home/travis/build/neovim/neovim/build/bin/nvim+0x51253f) = #1 0x528ed5 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/home/travis/build/neovim/neovim/build/bin/nvim+0x528ed5) = #2 0x515c3d in __asan::AsanThread::GetStackFrameAccessByAddr(unsigned long, __asan::AsanThread::StackFrameAccess*) (/home/travis/build/neovim/neovim/build/bin/nvim+0x515c3d) = #3 0x50c758 in __asan::DescribeAddressIfStack(unsigned long, unsigned long) (/home/travis/build/neovim/neovim/build/bin/nvim+0x50c758) = #4 0x50cd02 in __asan::DescribeAddress(unsigned long, unsigned long, char const*) (/home/travis/build/neovim/neovim/build/bin/nvim+0x50cd02) = #5 0x510f3d in __asan::ReportGenericError(unsigned long, unsigned long, unsigned long, unsigned long, bool, unsigned long, unsigned int, bool) (/home/travis/build/neovim/neovim/build/bin/nvim+0x510f3d) = #6 0x5128a2 in __asan_report_load4 (/home/travis/build/neovim/neovim/build/bin/nvim+0x5128a2) = neovim#7 0x1771008 in vim_vsnprintf /home/travis/build/neovim/neovim/src/nvim/strings.c:872:59 = neovim#8 0xfbbe2d in emsgf /home/travis/build/neovim/neovim/src/nvim/message.c:593:3 = neovim#9 0xe6fb9f in nlua_error /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:109:3 = neovim#10 0xe6efed in nlua_exec_lua_string /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:147:5 = neovim#11 0x19d6386 in lj_BC_JFUNCV (/home/travis/build/neovim/neovim/build/bin/nvim+0x19d6386) = neovim#12 0xe6eb52 in executor_exec_lua /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:312:3 = neovim#13 0xe71b48 in ex_lua /home/travis/build/neovim/neovim/src/nvim/lua/executor.c:596:3 = neovim#14 0xb686e8 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2241:5 = neovim#15 0xb46de7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:607:20 = neovim#16 0x848b1c in ex_execute /home/travis/build/neovim/neovim/src/nvim/eval.c:19319:7 = neovim#17 0xb686e8 in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2241:5 = neovim#18 0xb46de7 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:607:20 = neovim#19 0xb4d0f5 in do_cmdline_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:279:10 = neovim#20 0x6501e3 in nvim_command /home/travis/build/neovim/neovim/src/nvim/api/vim.c:52:3 = neovim#21 0x59ea70 in handle_nvim_command /home/travis/build/neovim/neovim/build/src/nvim/auto/api/private/dispatch_wrappers.generated.h:1577:3 = neovim#22 0x1079987 in on_request_event /home/travis/build/neovim/neovim/src/nvim/msgpack_rpc/channel.c:467:19 = neovim#23 0xa62492 in multiqueue_process_events /home/travis/build/neovim/neovim/src/nvim/event/multiqueue.c:150:7 = neovim#24 0x1148e45 in nv_event /home/travis/build/neovim/neovim/src/nvim/normal.c:7905:3 = neovim#25 0x10ec79a in normal_execute /home/travis/build/neovim/neovim/src/nvim/normal.c:1137:3 = neovim#26 0x17697a0 in state_enter /home/travis/build/neovim/neovim/src/nvim/state.c:61:26 = neovim#27 0x10a473b in normal_enter /home/travis/build/neovim/neovim/src/nvim/normal.c:467:3 = neovim#28 0xe78763 in main /home/travis/build/neovim/neovim/src/nvim/main.c:556:3 = neovim#29 0x2b264fbddf44 in __libc_start_main /build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:287 = neovim#30 0x44bef5 in _start (/home/travis/build/neovim/neovim/build/bin/nvim+0x44bef5) = ===================================================================================================== ./test/helpers.lua:95: assertion failed! stack traceback: ./test/helpers.lua:95: in function 'check_logs' ./test/functional/helpers.lua:654: in function <./test/functional/helpers.lua:653> ```
Wouldn't it be better to figure out why vim_vsnprintf doesn't work here? |
Could the ASAN error messages be false positves, because Lua uses |
Have not heard of sanitizer having problems due to longjump, only saw problems due to JIT. And we are building lua with sanitizers enabled. |
It looks like this change might fix the problem in ASAN. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Just applying @oni-link's patch.
#6735 (comment)
cc @oni-link @ZyX-I