To: vim_dev@googlegroups.com Subject: Patch 8.1.1946 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.1946 Problem: Memory error when profiling a function without a script ID. Solution: Check for missing script ID. (closes #4877) Files: src/testdir/test_profile.vim, src/profiler.c *** ../vim-8.1.1945/src/testdir/test_profile.vim 2019-08-14 21:12:00.977833219 +0200 --- src/testdir/test_profile.vim 2019-08-30 18:30:47.077861485 +0200 *************** *** 4,9 **** --- 4,10 ---- CheckFeature profile source shared.vim + source screendump.vim func Test_profile_func() let lines =<< trim [CODE] *************** *** 522,524 **** --- 523,551 ---- call delete('Xprofile_file.vim') call delete('Xprofile_file.log') endfunc + + " When typing the function it won't have a script ID, test that this works. + func Test_profile_typed_func() + CheckScreendump + + let lines =<< trim END + profile start XprofileTypedFunc + END + call writefile(lines, 'XtestProfile') + let buf = RunVimInTerminal('-S XtestProfile', #{}) + + call term_sendkeys(buf, ":func DoSomething()\" + \ .. "echo 'hello'\" + \ .. "endfunc\") + call term_sendkeys(buf, ":profile func DoSomething\") + call term_sendkeys(buf, ":call DoSomething()\") + call term_wait(buf, 200) + call StopVimInTerminal(buf) + let lines = readfile('XprofileTypedFunc') + call assert_equal("FUNCTION DoSomething()", lines[0]) + call assert_equal("Called 1 time", lines[1]) + + " clean up + call delete('XprofileTypedFunc') + call delete('XtestProfile') + endfunc *** ../vim-8.1.1945/src/profiler.c 2019-08-20 20:13:40.330821936 +0200 --- src/profiler.c 2019-08-30 18:32:53.225462146 +0200 *************** *** 690,702 **** fprintf(fd, "FUNCTION %s()\n", fp->uf_name + 3); else fprintf(fd, "FUNCTION %s()\n", fp->uf_name); ! p = home_replace_save(NULL, ! get_scriptname(fp->uf_script_ctx.sc_sid)); ! if (p != NULL) { ! fprintf(fd, " Defined: %s line %ld\n", p, (long)fp->uf_script_ctx.sc_lnum); ! vim_free(p); } if (fp->uf_tm_count == 1) fprintf(fd, "Called 1 time\n"); --- 690,705 ---- fprintf(fd, "FUNCTION %s()\n", fp->uf_name + 3); else fprintf(fd, "FUNCTION %s()\n", fp->uf_name); ! if (fp->uf_script_ctx.sc_sid > 0) { ! p = home_replace_save(NULL, ! get_scriptname(fp->uf_script_ctx.sc_sid)); ! if (p != NULL) ! { ! fprintf(fd, " Defined: %s line %ld\n", p, (long)fp->uf_script_ctx.sc_lnum); ! vim_free(p); ! } } if (fp->uf_tm_count == 1) fprintf(fd, "Called 1 time\n"); *** ../vim-8.1.1945/src/version.c 2019-08-30 17:34:04.380050974 +0200 --- src/version.c 2019-08-30 18:04:24.980090022 +0200 *************** *** 763,764 **** --- 763,766 ---- { /* Add new patch number below this line */ + /**/ + 1946, /**/ -- hundred-and-one symptoms of being an internet addict: 142. You dream about creating the world's greatest web site. /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 ///