fixing prs_unistr2(). For the special case of an empty (but existing)
authorJean-François Micouleau <jfm@samba.org>
Thu, 5 Oct 2000 12:41:31 +0000 (12:41 +0000)
committerJean-François Micouleau <jfm@samba.org>
Thu, 5 Oct 2000 12:41:31 +0000 (12:41 +0000)
string.

J.F.
(This used to be commit 83bfe94771e0afbffbb4a1a741cd9983ef612362)

source3/rpc_parse/parse_prs.c

index d6e5797aaf0ed7980ec62f98c36ca83ccaa42e75..401efaadc649b759e67e5b7f7bbb5b6afcfe45de 100644 (file)
@@ -617,22 +617,24 @@ BOOL prs_unistr2(BOOL charmode, char *name, prs_struct *ps, int depth, UNISTR2 *
                return False;
 
        if (UNMARSHALLING(ps)) {
-               str->buffer = (uint16 *)prs_alloc_mem(ps,str->uni_str_len * sizeof(uint16));
+               str->buffer = (uint16 *)prs_alloc_mem(ps,str->uni_max_len * sizeof(uint16));
                if (str->buffer == NULL)
                        return False;
+               memset(str->buffer, '\0', str->uni_max_len * sizeof(uint16));
        }
 
+       /* If the string is empty, we don't have anything to stream */
+       if (str->uni_str_len==0)
+               return True;
+
        p = (char *)str->buffer;
 
        /* If we're using big-endian, reverse to get little-endian. */
-       if(ps->bigendian_data)
-       {
+       if(ps->bigendian_data) {
                DBG_RW_PSVAL(charmode, name, depth, ps->data_offset, 
                             ps->io, ps->bigendian_data, q, p, 
                             str->uni_str_len)
-       }
-       else
-       {
+       } else {
                DBG_RW_PCVAL(charmode, name, depth, ps->data_offset, 
                             ps->io, q, p, str->uni_str_len * sizeof(uint16))
        }