mirror of
https://github.com/troydhanson/tpl.git
synced 2024-12-26 23:57:25 +08:00
manifest free bug in S(s)# per Andrei Diaconu
This commit is contained in:
parent
0cf16b3e8a
commit
d900c940e8
@ -36,7 +36,7 @@ PROGS = test1 test2 test3 test4 test5 test6 test7 test8 \
|
||||
test97 test98 test99 test100 test101 test102 test103 test104 \
|
||||
test105 test106 test107 test108 test109 test110 test111 test112 \
|
||||
test113 test114 test115 test116 test117 test118 test119 test120 \
|
||||
test121 test122 test123 test124
|
||||
test121 test122 test123 test124 test125
|
||||
|
||||
TPLSRC = ../src
|
||||
CFLAGS = -I$(TPLSRC) -g
|
||||
|
@ -123,3 +123,4 @@ test121: test s##
|
||||
test122: test S(ic#f$(ci))
|
||||
test123: setjmp/longjmp based fatal error handler
|
||||
test124: test A(S(c#)s) as per bug report from Eric Rose
|
||||
test125: test to manifest a free bug with S(s)# per Andrei Diaconu
|
||||
|
27
tests/test125.c
Normal file
27
tests/test125.c
Normal file
@ -0,0 +1,27 @@
|
||||
#include "tpl.h"
|
||||
|
||||
struct Test {
|
||||
char *string;
|
||||
};
|
||||
|
||||
struct Test tests[] = {{"first"}, {"second"},{"third"}};
|
||||
char buffer[5000]; /* this doesn't matter- just a place to dump to */
|
||||
|
||||
/* this test is useful under valgrind to detect an unfreed string bug
|
||||
*/
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
tpl_node *tn;
|
||||
tn = tpl_map("S(s)#", &tests, 3);
|
||||
tpl_pack(tn, 0);
|
||||
tpl_dump(tn, TPL_MEM|TPL_PREALLOCD, buffer, sizeof(buffer));
|
||||
/* at the next line, when the tpl tree is freed, the string node
|
||||
* is followed by a pound node. The string node has actually had
|
||||
* its data member multipled by the pound node's factor, but we
|
||||
* don't know that, until after we freed the string node at tpl.c:710.
|
||||
* if you run this example under valgrind --leak-check=full you can
|
||||
* see 13 bytes lost which are "second" and "third" above
|
||||
*/
|
||||
tpl_free(tn);
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user