diff options
author | Andrew Bartlett <abartlet@samba.org> | 2023-03-29 11:49:43 +1300 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2023-03-31 01:48:30 +0000 |
commit | c6981f60549c497d401c4c4173dc362f083791d7 (patch) | |
tree | 38dea45f14f5efda67c9464940442ad4b07e5b80 /librpc | |
parent | 0ef71cf1524e855b0ae17051b054ef27d1c95717 (diff) | |
download | samba-c6981f60549c497d401c4c4173dc362f083791d7.tar.gz |
librpc/ndr: Make ndr_push_compression_state_free() a talloc destructor
This means that the generic_mszip_free() will still be called on failure.
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Diffstat (limited to 'librpc')
-rw-r--r-- | librpc/ndr/ndr_cab.c | 3 | ||||
-rw-r--r-- | librpc/ndr/ndr_compression.c | 39 | ||||
-rw-r--r-- | librpc/ndr/ndr_compression.h | 1 |
3 files changed, 20 insertions, 23 deletions
diff --git a/librpc/ndr/ndr_cab.c b/librpc/ndr/ndr_cab.c index 42e18e9624b..ac8565fd1e0 100644 --- a/librpc/ndr/ndr_cab.c +++ b/librpc/ndr/ndr_cab.c @@ -236,8 +236,7 @@ static enum ndr_err_code ndr_push_folder_cfdata(struct ndr_push *ndr, SIVAL(ndr->data, csum_offset, csum); } - ndr_push_compression_state_free(ndr->cstate); - ndr->cstate = NULL; + TALLOC_FREE(ndr->cstate); return NDR_ERR_SUCCESS; } diff --git a/librpc/ndr/ndr_compression.c b/librpc/ndr/ndr_compression.c index 5374cdfbb1f..1133d5216db 100644 --- a/librpc/ndr/ndr_compression.c +++ b/librpc/ndr/ndr_compression.c @@ -1066,6 +1066,23 @@ void ndr_pull_compression_state_free(struct ndr_compression_state *state) TALLOC_FREE(state); } +static int ndr_push_compression_state_free(struct ndr_compression_state *state) +{ + switch (state->type) { + case NDR_COMPRESSION_NONE: + case NDR_COMPRESSION_MSZIP: + case NDR_COMPRESSION_XPRESS: + case NDR_COMPRESSION_XPRESS_HUFF_RAW: + break; + case NDR_COMPRESSION_MSZIP_CAB: + generic_mszip_free(state); + break; + default: + break; + } + return 0; +} + enum ndr_err_code ndr_push_compression_state_init(struct ndr_push *ndr, enum ndr_compression_alg compression_alg, struct ndr_compression_state **state) @@ -1112,28 +1129,10 @@ enum ndr_err_code ndr_push_compression_state_init(struct ndr_push *ndr, break; } + talloc_set_destructor(s, ndr_push_compression_state_free); + *state = s; return NDR_ERR_SUCCESS; } -void ndr_push_compression_state_free(struct ndr_compression_state *state) -{ - if (state == NULL) { - return; - } - - switch (state->type) { - case NDR_COMPRESSION_NONE: - case NDR_COMPRESSION_MSZIP: - case NDR_COMPRESSION_XPRESS: - case NDR_COMPRESSION_XPRESS_HUFF_RAW: - break; - case NDR_COMPRESSION_MSZIP_CAB: - generic_mszip_free(state); - break; - default: - break; - } - TALLOC_FREE(state); -} diff --git a/librpc/ndr/ndr_compression.h b/librpc/ndr/ndr_compression.h index 15b6f27984e..7f938523ada 100644 --- a/librpc/ndr/ndr_compression.h +++ b/librpc/ndr/ndr_compression.h @@ -55,7 +55,6 @@ void ndr_pull_compression_state_free(struct ndr_compression_state *state); enum ndr_err_code ndr_push_compression_state_init(struct ndr_push *ndr, enum ndr_compression_alg compression_alg, struct ndr_compression_state **state); -void ndr_push_compression_state_free(struct ndr_compression_state *state); #undef _PRINTF_ATTRIBUTE #define _PRINTF_ATTRIBUTE(a1, a2) |