summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2010-02-19 08:11:24 +0100
committerKarolin Seeger <kseeger@samba.org>2010-02-19 14:32:32 +0100
commit61ca739e1b51af0ab935cfa56b75f88912a55899 (patch)
treed75a12cf1181d5528c898a72d0ca105af979f2e3
parent527ce7ebaabb5e9f49b590a18e329a18241d6f08 (diff)
downloadsamba-61ca739e1b51af0ab935cfa56b75f88912a55899.tar.gz
librpc/ndr: don't overwrite the content in ndr_push_relative_ptr2_end()
metze (cherry picked from commit 76aa37f653fec2d511921768381db7da661750cb) The last 24 patches address bug #6888 (REGRESSION: printing support for 64 bit windows clients broken). (cherry picked from commit b094f4954d0bef08794c5edcf102444908f1971c)
-rw-r--r--librpc/ndr/ndr.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c
index bece6b94e17..5030443abce 100644
--- a/librpc/ndr/ndr.c
+++ b/librpc/ndr/ndr.c
@@ -1196,11 +1196,17 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_end(struct ndr_push *ndr, cons
}
if (len > 0) {
+ uint32_t clear_size = correct_offset - begin_offset;
+
+ clear_size = MIN(clear_size, len);
+
/* now move the marshalled buffer to the end of the main buffer */
memmove(ndr->data + correct_offset, ndr->data + begin_offset, len);
- /* and wipe out old buffer within the main buffer */
- memset(ndr->data + begin_offset, '\0', len);
+ if (clear_size) {
+ /* and wipe out old buffer within the main buffer */
+ memset(ndr->data + begin_offset, '\0', clear_size);
+ }
}
/* and set the end offset for the next buffer */