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