Hi
The :syntime tests added recently in vim-8.0.131 show
a ubsan error (undefined behavior) where qsort is
called with a NULL pointer to sort 0 elements:
syntax.c:6708:11: runtime error: null pointer passed as argument 1,
which is declared to never be null
/usr/include/stdlib.h:766:30: note: nonnull attribute specified here
#0 0xe407a9 in syntime_report /home/pel/sb/vim/src/syntax.c:6708
(discriminator 5)
#1 0xe3ebe8 in ex_syntime /home/pel/sb/vim/src/syntax.c:6582
#2 0x6bb9ef in do_one_cmd /home/pel/sb/vim/src/ex_docmd.c:2961
#3 0x6a6abc in do_cmdline /home/pel/sb/vim/src/ex_docmd.c:1110
#4 0x6a99e5 in do_cmdline_cmd /home/pel/sb/vim/src/ex_docmd.c:715
#5 0x5bad08 in f_execute /home/pel/sb/vim/src/evalfunc.c:2834
#6 0x5a73b7 in call_internal_func /home/pel/sb/vim/src/evalfunc.c:1001
#7 0xf4ba73 in call_func /home/pel/sb/vim/src/userfunc.c:1372
#8 0xf49ccf in get_func_tv /home/pel/sb/vim/src/userfunc.c:455
#9 0x5a2939 in eval7 /home/pel/sb/vim/src/eval.c:4349
#10 0x59fe51 in eval6 /home/pel/sb/vim/src/eval.c:3977
#11 0x59e954 in eval5 /home/pel/sb/vim/src/eval.c:3793
#12 0x59b44a in eval4 /home/pel/sb/vim/src/eval.c:3492
#13 0x59ae7c in eval3 /home/pel/sb/vim/src/eval.c:3409
#14 0x561e4c in eval2 /home/pel/sb/vim/src/eval.c:3341
#15 0x550b05 in eval1 /home/pel/sb/vim/src/eval.c:3269
#16 0x54ed83 in eval0 /home/pel/sb/vim/src/eval.c:3229
#17 0x5550af in ex_let /home/pel/sb/vim/src/eval.c:1204
#18 0x6bb9ef in do_one_cmd /home/pel/sb/vim/src/ex_docmd.c:2961
#19 0x6a6abc in do_cmdline /home/pel/sb/vim/src/ex_docmd.c:1110
#20 0xf51cfc in call_user_func /home/pel/sb/vim/src/userfunc.c:893
#21 0xf4b86a in call_func /home/pel/sb/vim/src/userfunc.c:1353
#22 0xf49ccf in get_func_tv /home/pel/sb/vim/src/userfunc.c:455
#23 0xf69148 in ex_call /home/pel/sb/vim/src/userfunc.c:2981
#24 0x6bb9ef in do_one_cmd /home/pel/sb/vim/src/ex_docmd.c:2961
#25 0x6a6abc in do_cmdline /home/pel/sb/vim/src/ex_docmd.c:1110
#26 0x584785 in ex_execute /home/pel/sb/vim/src/eval.c:8351
#27 0x6bb9ef in do_one_cmd /home/pel/sb/vim/src/ex_docmd.c:2961
#28 0x6a6abc in do_cmdline /home/pel/sb/vim/src/ex_docmd.c:1110
#29 0xf51cfc in call_user_func /home/pel/sb/vim/src/userfunc.c:893
#30 0xf4b86a in call_func /home/pel/sb/vim/src/userfunc.c:1353
#31 0xf49ccf in get_func_tv /home/pel/sb/vim/src/userfunc.c:455
#32 0xf69148 in ex_call /home/pel/sb/vim/src/userfunc.c:2981
#33 0x6bb9ef in do_one_cmd /home/pel/sb/vim/src/ex_docmd.c:2961
#34 0x6a6abc in do_cmdline /home/pel/sb/vim/src/ex_docmd.c:1110
#35 0x69c476 in do_source /home/pel/sb/vim/src/ex_cmds2.c:4111
#36 0x699b3f in cmd_source /home/pel/sb/vim/src/ex_cmds2.c:3724
#37 0x699da5 in ex_source /home/pel/sb/vim/src/ex_cmds2.c:3699
#38 0x6bb9ef in do_one_cmd /home/pel/sb/vim/src/ex_docmd.c:2961
#39 0x6a6abc in do_cmdline /home/pel/sb/vim/src/ex_docmd.c:1110
#40 0x6a99e5 in do_cmdline_cmd /home/pel/sb/vim/src/ex_docmd.c:715
#41 0x10de60c in exe_commands /home/pel/sb/vim/src/main.c:2901
#42 0x10d8691 in vim_main2 /home/pel/sb/vim/src/main.c:781
#43 0x10cd8ea in main /home/pel/sb/vim/src/main.c:415
#44 0x2b0bcc508f44 in __libc_start_main
/build/eglibc-oGUzwX/eglibc-2.19/csu/libc-start.c:287
#45 0x436c28 in _start ??:?
It probably nit-picky as sorting a NULL pointer with 0
elements is most likely a no-op on all platforms.
But it's undefined behavior according to ubsan, so
it's best to fix it.
Regards
Dominique
--
--
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.
diff --git a/src/syntax.c b/src/syntax.c
index 75ede36..077a810 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6705,7 +6705,8 @@ syntime_report(void)
}
/* sort on total time */
- qsort(ga.ga_data, (size_t)ga.ga_len, sizeof(time_entry_T),
+ if (ga.ga_len > 1)
+ qsort(ga.ga_data, (size_t)ga.ga_len, sizeof(time_entry_T),
syn_compare_syntime);
MSG_PUTS_TITLE(_(" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"));