Mercurial > vim
comparison src/testdir/test_signs.vim @ 15304:5bfdce4de97f v8.1.0660
patch 8.1.0660: sign_cleanup() may leak memory
commit https://github.com/vim/vim/commit/1ea88a3e12e5f6afc5353cd0d6e6d4f4a89ced94
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Dec 29 21:00:27 2018 +0100
patch 8.1.0660: sign_cleanup() may leak memory
Problem: sign_cleanup() may leak memory.
Solution: Free the group name before returning. Add a few more tests.
(Yegappan Lakshmanan)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 29 Dec 2018 21:15:05 +0100 |
parents | 890203d87ee5 |
children | c6c306c5027f |
comparison
equal
deleted
inserted
replaced
15303:6d4c7811e078 | 15304:5bfdce4de97f |
---|---|
383 \ 'E158:') | 383 \ 'E158:') |
384 call assert_fails('call sign_place(21, "", "sign1", "Xsign", | 384 call assert_fails('call sign_place(21, "", "sign1", "Xsign", |
385 \ {"lnum" : -1})', 'E885:') | 385 \ {"lnum" : -1})', 'E885:') |
386 call assert_fails('call sign_place(22, "", "sign1", "Xsign", | 386 call assert_fails('call sign_place(22, "", "sign1", "Xsign", |
387 \ {"lnum" : 0})', 'E885:') | 387 \ {"lnum" : 0})', 'E885:') |
388 call assert_fails('call sign_place(22, "", "sign1", "Xsign", | |
389 \ {"lnum" : []})', 'E745:') | |
388 call assert_equal(-1, sign_place(1, "*", "sign1", "Xsign", {"lnum" : 10})) | 390 call assert_equal(-1, sign_place(1, "*", "sign1", "Xsign", {"lnum" : 10})) |
389 | 391 |
390 " Tests for sign_getplaced() | 392 " Tests for sign_getplaced() |
391 call assert_equal([{'bufnr' : bufnr(''), 'signs' : | 393 call assert_equal([{'bufnr' : bufnr(''), 'signs' : |
392 \ [{'id' : 10, 'group' : '', 'lnum' : 20, 'name' : 'sign1', | 394 \ [{'id' : 10, 'group' : '', 'lnum' : 20, 'name' : 'sign1', |
418 call sign_place(20, '', 'sign2', 'Xsign', {"lnum" : 30}) | 420 call sign_place(20, '', 'sign2', 'Xsign', {"lnum" : 30}) |
419 call assert_fails("call sign_unplace('', | 421 call assert_fails("call sign_unplace('', |
420 \ {'id' : 20, 'buffer' : 'buffer.c'})", 'E158:') | 422 \ {'id' : 20, 'buffer' : 'buffer.c'})", 'E158:') |
421 call assert_fails("call sign_unplace('', | 423 call assert_fails("call sign_unplace('', |
422 \ {'id' : 20, 'buffer' : ''})", 'E158:') | 424 \ {'id' : 20, 'buffer' : ''})", 'E158:') |
423 call assert_fails("call sign_unplace('', | 425 call assert_fails("call sign_unplace('g1', |
424 \ {'id' : 20, 'buffer' : 200})", 'E158:') | 426 \ {'id' : 20, 'buffer' : 200})", 'E158:') |
425 call assert_fails("call sign_unplace('', 'mySign')", 'E715:') | 427 call assert_fails("call sign_unplace('g1', 'mySign')", 'E715:') |
426 | 428 |
427 " Tests for sign_undefine() | 429 " Tests for sign_undefine() |
428 call assert_equal(0, sign_undefine("sign1")) | 430 call assert_equal(0, sign_undefine("sign1")) |
429 call assert_equal([], sign_getdefined("sign1")) | 431 call assert_equal([], sign_getdefined("sign1")) |
430 call assert_fails('call sign_undefine("none")', 'E155:') | 432 call assert_fails('call sign_undefine("none")', 'E155:') |
662 call assert_fails("sign place 3 group= name=sign1 buffer=" . bnum, 'E474:') | 664 call assert_fails("sign place 3 group= name=sign1 buffer=" . bnum, 'E474:') |
663 | 665 |
664 call delete("Xsign") | 666 call delete("Xsign") |
665 call sign_unplace('*') | 667 call sign_unplace('*') |
666 call sign_undefine() | 668 call sign_undefine() |
667 enew | only | 669 enew | only |
668 endfunc | 670 endfunc |
669 | 671 |
670 " Place signs used for ":sign unplace" command test | 672 " Place signs used for ":sign unplace" command test |
671 func Place_signs_for_test() | 673 func Place_signs_for_test() |
672 call sign_unplace('*') | 674 call sign_unplace('*') |
1011 sign unplace group=* | 1013 sign unplace group=* |
1012 call assert_equal([], sign_getplaced('Xsign1', {'group' : '*'})[0].signs) | 1014 call assert_equal([], sign_getplaced('Xsign1', {'group' : '*'})[0].signs) |
1013 | 1015 |
1014 call sign_unplace('*') | 1016 call sign_unplace('*') |
1015 call sign_undefine() | 1017 call sign_undefine() |
1016 enew | only | 1018 enew | only |
1017 call delete("Xsign1") | 1019 call delete("Xsign1") |
1018 call delete("Xsign2") | 1020 call delete("Xsign2") |
1019 endfunc | 1021 endfunc |
1020 | 1022 |
1021 " Tests for auto-generating the sign identifier | 1023 " Tests for auto-generating the sign identifier |
1040 call assert_equal(4, sign_place(0, '', 'sign1', 'Xsign', | 1042 call assert_equal(4, sign_place(0, '', 'sign1', 'Xsign', |
1041 \ {'lnum' : 12})) | 1043 \ {'lnum' : 12})) |
1042 | 1044 |
1043 call assert_equal(1, sign_place(0, 'g1', 'sign1', 'Xsign', | 1045 call assert_equal(1, sign_place(0, 'g1', 'sign1', 'Xsign', |
1044 \ {'lnum' : 11})) | 1046 \ {'lnum' : 11})) |
1047 " Check for the next generated sign id in this group | |
1048 call assert_equal(2, sign_place(0, 'g1', 'sign1', 'Xsign', | |
1049 \ {'lnum' : 12})) | |
1045 call assert_equal(0, sign_unplace('g1', {'id' : 1})) | 1050 call assert_equal(0, sign_unplace('g1', {'id' : 1})) |
1046 call assert_equal(10, | 1051 call assert_equal(10, |
1047 \ sign_getplaced('Xsign', {'id' : 1})[0].signs[0].lnum) | 1052 \ sign_getplaced('Xsign', {'id' : 1})[0].signs[0].lnum) |
1048 | 1053 |
1049 call delete("Xsign") | 1054 call delete("Xsign") |
1050 call sign_unplace('*') | 1055 call sign_unplace('*') |
1051 call sign_undefine() | 1056 call sign_undefine() |
1052 enew | only | 1057 enew | only |
1053 endfunc | 1058 endfunc |
1054 | 1059 |
1055 " Test for sign priority | 1060 " Test for sign priority |
1056 func Test_sign_priority() | 1061 func Test_sign_priority() |
1057 enew | only | 1062 enew | only |
1083 \ s[0].signs) | 1088 \ s[0].signs) |
1084 | 1089 |
1085 " Error case | 1090 " Error case |
1086 call assert_fails("call sign_place(1, 'g1', 'sign1', 'Xsign', | 1091 call assert_fails("call sign_place(1, 'g1', 'sign1', 'Xsign', |
1087 \ [])", 'E715:') | 1092 \ [])", 'E715:') |
1093 call assert_fails("call sign_place(1, 'g1', 'sign1', 'Xsign', | |
1094 \ {'priority' : []})", 'E745:') | |
1088 call sign_unplace('*') | 1095 call sign_unplace('*') |
1089 | 1096 |
1090 " Tests for the :sign place command with priority | 1097 " Tests for the :sign place command with priority |
1091 sign place 5 line=10 name=sign1 priority=30 file=Xsign | 1098 sign place 5 line=10 name=sign1 priority=30 file=Xsign |
1092 sign place 5 group=g1 line=10 name=sign1 priority=20 file=Xsign | 1099 sign place 5 group=g1 line=10 name=sign1 priority=20 file=Xsign |
1102 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . | 1109 call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . |
1103 \ " line=10 id=5 group=g1 name=sign1 priority=20\n", a) | 1110 \ " line=10 id=5 group=g1 name=sign1 priority=20\n", a) |
1104 | 1111 |
1105 call sign_unplace('*') | 1112 call sign_unplace('*') |
1106 call sign_undefine() | 1113 call sign_undefine() |
1107 enew | only | 1114 enew | only |
1108 call delete("Xsign") | 1115 call delete("Xsign") |
1109 endfunc | 1116 endfunc |
1110 | 1117 |
1111 " Tests for memory allocation failures in sign functions | 1118 " Tests for memory allocation failures in sign functions |
1112 func Test_sign_memfailures() | 1119 func Test_sign_memfailures() |
1144 call assert_equal([{'lnum': 11, 'id': 4, 'name': 'sign1', | 1151 call assert_equal([{'lnum': 11, 'id': 4, 'name': 'sign1', |
1145 \ 'priority': 10, 'group': 'g1'}], binfo[0].signs) | 1152 \ 'priority': 10, 'group': 'g1'}], binfo[0].signs) |
1146 | 1153 |
1147 call sign_unplace('*') | 1154 call sign_unplace('*') |
1148 call sign_undefine() | 1155 call sign_undefine() |
1149 enew | only | 1156 enew | only |
1150 call delete("Xsign") | 1157 call delete("Xsign") |
1151 endfunc | 1158 endfunc |