From 61ca739e1b51af0ab935cfa56b75f88912a55899 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 19 Feb 2010 08:11:24 +0100 Subject: 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) --- librpc/ndr/ndr.c | 10 ++++++++-- 1 file 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 */ -- cgit v1.2.1