1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-28 07:21:54 +03:00

r13989: Fix for Coverity bug #45 and associated spoolss RPC_BUFFER

problems. Ensure that if the parse succeeds on UNMARSHALL
we have a valid (although possibly empty) RPC_BUFFER returned.
Jeremy.
(This used to be commit d319cc9c08)
This commit is contained in:
Jeremy Allison 2006-03-07 20:52:43 +00:00 committed by Gerald (Jerry) Carter
parent 03b32953cf
commit cd49e2546e

View File

@ -108,19 +108,34 @@ BOOL prs_rpcbuffer_p(const char *desc, prs_struct *ps, int depth, RPC_BUFFER **b
data_p = *buffer ? 0xf000baaa : 0;
if ( !prs_uint32("ptr", ps, depth, &data_p ))
if ( !prs_uint32("ptr", ps, depth, &data_p )) {
return False;
}
/* We must always return a valid buffer pointer even if the
client didn't send one - just leave it initialized to null. */
if ( UNMARSHALLING(ps) ) {
if ( !(*buffer = PRS_ALLOC_MEM(ps, RPC_BUFFER, 1)) ) {
return False;
}
}
/* we're done if there is no data */
if ( !data_p )
if (!data_p) {
if (UNMARSHALLING(ps)) {
RPC_BUFFER *pbuffer = *buffer;
/* On unmarshalling we must return a valid,
but zero size value RPC_BUFFER. */
pbuffer->size = 0;
pbuffer->string_at_end = 0;
if (!prs_init(&pbuffer->prs, 0, prs_get_mem_context(ps), UNMARSHALL)) {
return False;
}
}
return True;
if ( UNMARSHALLING(ps) ) {
if ( !(*buffer = PRS_ALLOC_MEM(ps, RPC_BUFFER, 1)) )
return False;
}
return prs_rpcbuffer( desc, ps, depth, *buffer);
}