r11742: fix pushing of 0 length blobs
authorStefan Metzmacher <metze@samba.org>
Wed, 16 Nov 2005 13:34:56 +0000 (13:34 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:46:20 +0000 (13:46 -0500)
metze

source/libcli/smb2/request.c

index bb8ff06e2d3d3e00bd8ebb95aaa619cadfa6c282..a9a7e6b71f6b8b34fb75988539f86f23c48108e4 100644 (file)
@@ -252,6 +252,12 @@ NTSTATUS smb2_push_o16s16_blob(struct smb2_request_buffer *buf, uint8_t *ptr, DA
                return NT_STATUS_BUFFER_TOO_SMALL;
        }
 
+       if (blob.length == 0) {
+               SSVAL(ptr, 0, 0);
+               SSVAL(ptr, 4, 0);
+               return NT_STATUS_OK;
+       }
+
        offset = buf->dynamic - buf->hdr;
        padding_length = smb2_padding_size(offset, 2);
        offset += padding_length;
@@ -318,6 +324,12 @@ NTSTATUS smb2_push_o16s32_blob(struct smb2_request_buffer *buf, uint8_t *ptr, DA
                return NT_STATUS_BUFFER_TOO_SMALL;
        }
 
+       if (blob.length == 0) {
+               SSVAL(ptr, 0, 0);
+               SIVAL(ptr, 4, 0);
+               return NT_STATUS_OK;
+       }
+
        offset = buf->dynamic - buf->hdr;
        padding_length = smb2_padding_size(offset, 2);
        offset += padding_length;
@@ -382,6 +394,12 @@ NTSTATUS smb2_push_o32s32_blob(struct smb2_request_buffer *buf, uint8_t *ptr, DA
                return NT_STATUS_BUFFER_TOO_SMALL;
        }
 
+       if (blob.length == 0) {
+               SIVAL(ptr, 0, 0);
+               SIVAL(ptr, 4, 0);
+               return NT_STATUS_OK;
+       }
+
        offset = buf->dynamic - buf->hdr;
        padding_length = smb2_padding_size(offset, 8);
        offset += padding_length;