diff --git a/7.3.516 b/7.3.516 new file mode 100644 index 0000000..d43be5a --- /dev/null +++ b/7.3.516 @@ -0,0 +1,94 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.516 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.516 +Problem: extend(o, o) may crash Vim. +Solution: Fix crash and add test. (Thinca and Hirohito Higashi) +Files: src/eval.c, src/testdir/test55.in, src/testdir/test55.ok + + +*** ../vim-7.3.515/src/eval.c 2012-04-30 17:35:44.000000000 +0200 +--- src/eval.c 2012-05-18 12:02:44.000000000 +0200 +*************** +*** 10191,10197 **** + EMSG2(_("E737: Key already exists: %s"), hi2->hi_key); + break; + } +! else if (*action == 'f') + { + clear_tv(&di1->di_tv); + copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv); +--- 10191,10197 ---- + EMSG2(_("E737: Key already exists: %s"), hi2->hi_key); + break; + } +! else if (*action == 'f' && HI2DI(hi2) != di1) + { + clear_tv(&di1->di_tv); + copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv); +*** ../vim-7.3.515/src/testdir/test55.in 2010-11-10 20:31:24.000000000 +0100 +--- src/testdir/test55.in 2012-05-18 11:57:23.000000000 +0200 +*************** +*** 352,357 **** +--- 352,375 ---- + :let dict4copy = deepcopy(dict4) + :$put =(l == lcopy) + :$put =(dict4 == dict4copy) ++ :" ++ :" Pass the same List to extend() ++ :let l = [1, 2, 3, 4, 5] ++ :call extend(l, l) ++ :$put =string(l) ++ :" ++ :" Pass the same Dict to extend() ++ :let d = { 'a': {'b': 'B'}} ++ :call extend(d, d) ++ :$put =string(d) ++ :" ++ :" Pass the same Dict to extend() with "error" ++ :try ++ : call extend(d, d, "error") ++ :catch ++ : $put =v:exception[:15] . v:exception[-1:-1] ++ :endtry ++ :$put =string(d) + :endfun + :" + :call Test(1, 2, [3, 4], {5: 6}) " This may take a while +*** ../vim-7.3.515/src/testdir/test55.ok 2010-11-10 20:31:24.000000000 +0100 +--- src/testdir/test55.ok 2012-05-18 11:57:01.000000000 +0200 +*************** +*** 111,113 **** +--- 111,117 ---- + 0 + 1 + 1 ++ [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] ++ {'a': {'b': 'B'}} ++ Vim(call):E737: a ++ {'a': {'b': 'B'}} +*** ../vim-7.3.515/src/version.c 2012-04-30 21:09:38.000000000 +0200 +--- src/version.c 2012-05-18 12:04:54.000000000 +0200 +*************** +*** 716,717 **** +--- 716,719 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 516, + /**/ + +-- +I used to wonder about the meaning of life. But I looked it +up in the dictionary under "L" and there it was - the meaning +of life. It was less than I expected. - Dogbert + + /// 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 ///