diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2024-11-27 12:41:20 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2024-11-27 12:50:23 -0500 |
commit | 0e6060790d6533847084770845c84e81862bff47 (patch) | |
tree | d6af626c7bc112eecf683bbcf039a55a970d58ec /src/interfaces/ecpg/preproc/variable.c | |
parent | 5c32c21afe6449a19b6dfafa17f29b71c9595e03 (diff) | |
download | postgresql-0e6060790d6533847084770845c84e81862bff47.tar.gz postgresql-0e6060790d6533847084770845c84e81862bff47.zip |
ecpg: fix some memory leakage of data-type-related structures.
ECPGfree_type() and related functions were quite incomplete
about removing subsidiary data structures. Possibly this is
because ecpg wasn't careful to make sure said data structures
always had their own storage. Previous patches in this series
cleaned up a lot of that, and I had to add a couple more
mm_strdup's here.
Also, ecpg.trailer tended to overwrite struct_member_list[struct_level]
without bothering to free up its previous contents, thus potentially
leaking a lot of struct-member-related storage. Add
ECPGfree_struct_member() calls at appropriate points.
Discussion: https://postgr.es/m/2011420.1713493114@sss.pgh.pa.us
Diffstat (limited to 'src/interfaces/ecpg/preproc/variable.c')
-rw-r--r-- | src/interfaces/ecpg/preproc/variable.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c index ac80d2c0209..e9bdfe56456 100644 --- a/src/interfaces/ecpg/preproc/variable.c +++ b/src/interfaces/ecpg/preproc/variable.c @@ -277,7 +277,12 @@ remove_typedefs(int brace_level) prev->next = p->next; if (p->type->type_enum == ECPGt_struct || p->type->type_enum == ECPGt_union) - free(p->struct_member_list); + ECPGfree_struct_member(p->struct_member_list); + free(p->type->type_storage); + free(p->type->type_str); + free(p->type->type_dimension); + free(p->type->type_index); + free(p->type->type_sizeof); free(p->type); free(p->name); free(p); |