r14043: After discussion with Jerry revert part of the
authorJeremy Allison <jra@samba.org>
Wed, 8 Mar 2006 17:50:44 +0000 (17:50 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:11:07 +0000 (11:11 -0500)
Coverity null-ref patch - put prs_rpcbuffer_p
back to the way it was (with an additional
coverity paranoia check) - move the real test
into rpcbuf_alloc_size instead.
Jeremy.

source/rpc_parse/parse_buffer.c

index 52117dc44b4d9e579d099e23af31b3453c899db3..21dddfa3cf552f078001c495d09abae78043f6d4 100644 (file)
@@ -108,37 +108,22 @@ 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 (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;
-                       }
-               }
+       if ( !data_p )
                return True;
-       }
 
-       /* Coverity paranoia. Buffer must be valid. */
-       if (!*buffer) {
-               return False;
+       if ( UNMARSHALLING(ps) ) {
+               if ( !(*buffer = PRS_ALLOC_MEM(ps, RPC_BUFFER, 1)) )
+                       return False;
+       } else {
+               /* Marshalling case. - coverity paranoia - should already be ok if data_p != 0 */
+               if (!*buffer) {
+                       return True;
+               }
        }
 
        return prs_rpcbuffer( desc, ps, depth, *buffer);
@@ -158,7 +143,11 @@ BOOL rpcbuf_alloc_size(RPC_BUFFER *buffer, uint32 buffer_size)
        
        if ( buffer_size == 0x0 )
                return True;
-       
+
+       if (!buffer) {
+               return False;
+       }
+
        ps= &buffer->prs;
 
        /* damn, I'm doing the reverse operation of prs_grow() :) */