diff options
author | David Disseldorp <ddiss@samba.org> | 2014-12-17 15:54:22 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2014-12-19 15:40:43 +0100 |
commit | 679c781112ce6b7cffca11c28e58ae5f9a0d717d (patch) | |
tree | 7f4db7666dda038dc968c82ab857b87e56177853 /source3/rpc_server | |
parent | b113ed6043622cdec68f3a70631b363594f3a8d0 (diff) | |
download | samba-679c781112ce6b7cffca11c28e58ae5f9a0d717d.tar.gz |
spoolss: clear info on GetPrintProcessorDirectory error
If an error is returned without zeroing a pre-allocated @info pointer,
then marshalling of the response will fail.
Bug: https://bugzilla.samba.org/show_bug.cgi?id=10984
Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source3/rpc_server')
-rw-r--r-- | source3/rpc_server/spoolss/srv_spoolss_nt.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c index 9b898d0ab53..c8c670b1123 100644 --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c @@ -10146,7 +10146,8 @@ WERROR _spoolss_GetPrintProcessorDirectory(struct pipes_struct *p, /* that's an [in out] buffer */ if (!r->in.buffer && (r->in.offered != 0)) { - return WERR_INVALID_PARAM; + result = WERR_INVALID_PARAM; + goto err_info_free; } DEBUG(5,("_spoolss_GetPrintProcessorDirectory: level %d\n", @@ -10162,7 +10163,8 @@ WERROR _spoolss_GetPrintProcessorDirectory(struct pipes_struct *p, snum = find_service(talloc_tos(), "prnproc$", &prnproc_share); if (!prnproc_share) { - return WERR_NOMEM; + result = WERR_NOMEM; + goto err_info_free; } if (snum != -1) { prnproc_share_exists = true; @@ -10173,8 +10175,7 @@ WERROR _spoolss_GetPrintProcessorDirectory(struct pipes_struct *p, r->in.environment, &r->out.info->info1); if (!W_ERROR_IS_OK(result)) { - TALLOC_FREE(r->out.info); - return result; + goto err_info_free; } *r->out.needed = SPOOLSS_BUFFER_UNION(spoolss_PrintProcessorDirectoryInfo, @@ -10182,6 +10183,10 @@ WERROR _spoolss_GetPrintProcessorDirectory(struct pipes_struct *p, r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + +err_info_free: + TALLOC_FREE(r->out.info); + return result; } /******************************************************************* |