diff options
author | Gerald Carter <jerry@samba.org> | 2002-12-17 21:35:56 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2002-12-17 21:35:56 +0000 |
commit | b1cfbb0f69e9aeefdc037760e5738c3c4bc4fc05 (patch) | |
tree | cc3b580aee4d445487d184a0fb88f6329d6ae278 /source3/rpc_server/srv_spoolss_nt.c | |
parent | a3460ac9ba56064252e87600a4e5a5a7e316134c (diff) | |
download | samba-b1cfbb0f69e9aeefdc037760e5738c3c4bc4fc05.tar.gz samba-b1cfbb0f69e9aeefdc037760e5738c3c4bc4fc05.tar.bz2 samba-b1cfbb0f69e9aeefdc037760e5738c3c4bc4fc05.zip |
* fix memory leak when constructing an driver_level_6 structure
and no dependent files (working on smbd memory leak). No CR# yet.
(This used to be commit f017fa7c478f87165b7b6aa83059fe6fad29ac15)
Diffstat (limited to 'source3/rpc_server/srv_spoolss_nt.c')
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 6dd4352cbc..b5c5749f3c 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -4928,8 +4928,10 @@ static uint32 init_unistr_array(uint16 **uni_array, fstring *char_array, char *s pstrcpy( line, v ); DEBUGADD(6,("%d:%s:%d\n", i, line, strlen(line))); + + /* add one extra unit16 for the second terminating NULL */ - if ( (tuary=Realloc(*uni_array, (j+strlen(line)+2)*sizeof(uint16))) == NULL ) { + if ( (tuary=Realloc(*uni_array, (j+1+strlen(line)+2)*sizeof(uint16))) == NULL ) { DEBUG(2,("init_unistr_array: Realloc error\n" )); return 0; } else @@ -4943,6 +4945,9 @@ static uint32 init_unistr_array(uint16 **uni_array, fstring *char_array, char *s } if (*uni_array) { + /* special case for ""; we need to add both NULL's here */ + if (!j) + (*uni_array)[j++]=0x0000; (*uni_array)[j]=0x0000; } @@ -5172,6 +5177,7 @@ static WERROR construct_printer_driver_info_6(DRIVER_INFO_6 *info, int snum, fill_printer_driver_info_6(info, driver, servername); free_a_printer(&printer,2); + free_a_printer_driver(driver, 3); return WERR_OK; } |