summaryrefslogtreecommitdiffstats
path: root/source/rpc_parse/parse_prs.c
diff options
context:
space:
mode:
authorShirish Kalele <kalele@samba.org>2000-05-26 22:37:08 +0000
committerShirish Kalele <kalele@samba.org>2000-05-26 22:37:08 +0000
commit590d9ece8449b1feecfe1aa13e61bcd8fea4e5bf (patch)
treed9f58a60f9779e0243a1e9ca7cc02c8d2db8c3a0 /source/rpc_parse/parse_prs.c
parent80a0079b2f993159ef35b02ba5c70ce9d8096879 (diff)
downloadsamba-590d9ece8449b1feecfe1aa13e61bcd8fea4e5bf.tar.gz
samba-590d9ece8449b1feecfe1aa13e61bcd8fea4e5bf.tar.xz
samba-590d9ece8449b1feecfe1aa13e61bcd8fea4e5bf.zip
Fixed memory leak in RPC parsing code.
Problem in prs_set_buffer_size() was Realloc returns a NULL when newsize is zero (equivalent to a free()). We were returning a failure here without resetting the buffer_size or the data_p pointer in the prs_struct. And we weren't checking for a failure from prs_set_buffer_size(). So realloc's to zero size were not reflected in the prs_struct: memory leak.
Diffstat (limited to 'source/rpc_parse/parse_prs.c')
-rw-r--r--source/rpc_parse/parse_prs.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/source/rpc_parse/parse_prs.c b/source/rpc_parse/parse_prs.c
index dafff63ad90..422b420a3c2 100644
--- a/source/rpc_parse/parse_prs.c
+++ b/source/rpc_parse/parse_prs.c
@@ -164,9 +164,11 @@ BOOL prs_set_buffer_size(prs_struct *ps, uint32 newsize)
if (newsize < ps->buffer_size) {
char *new_data_p = Realloc(ps->data_p, newsize);
- if (new_data_p == NULL) {
+ /* if newsize is zero, Realloc acts like free() & returns NULL*/
+ if (new_data_p == NULL && newsize != 0) {
DEBUG(0,("prs_set_buffer_size: Realloc failure for size %u.\n",
(unsigned int)newsize));
+ DEBUG(0,("prs_set_buffer_size: Reason %s\n",strerror(errno)));
return False;
}
ps->data_p = new_data_p;