diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c index 2279d1c..ff5c280 100644 --- a/librpc/ndr/ndr.c +++ b/librpc/ndr/ndr.c @@ -383,6 +383,10 @@ _PUBLIC_ void ndr_set_flags(uint32_t *pflags, uint32_t new_flags) } if (new_flags & LIBNDR_ALIGN_FLAGS) { (*pflags) &= ~LIBNDR_FLAG_REMAINING; + (*pflags) &= ~LIBNDR_FLAG_NOALIGN; + } + if (new_flags & LIBNDR_FLAG_NOALIGN) { + (*pflags) &= ~LIBNDR_ALIGN_FLAGS; } if (new_flags & LIBNDR_FLAG_NO_RELATIVE_REVERSE) { (*pflags) &= ~LIBNDR_FLAG_RELATIVE_REVERSE; diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c index 7a4e22a..3565ab6 100644 --- a/librpc/ndr/ndr_basic.c +++ b/librpc/ndr/ndr_basic.c @@ -1253,7 +1253,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flag { if (ndr->flags & LIBNDR_FLAG_REMAINING) { /* nothing to do */ - } else if (ndr->flags & LIBNDR_ALIGN_FLAGS) { + } else if (ndr->flags & (LIBNDR_ALIGN_FLAGS|LIBNDR_FLAG_NOALIGN)) { if (ndr->flags & LIBNDR_FLAG_NOALIGN) { blob.length = 0; } else if (ndr->flags & LIBNDR_FLAG_ALIGN2) { @@ -1281,7 +1281,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_DATA_BLOB(struct ndr_pull *ndr, int ndr_flag if (ndr->flags & LIBNDR_FLAG_REMAINING) { length = ndr->data_size - ndr->offset; - } else if (ndr->flags & LIBNDR_ALIGN_FLAGS) { + } else if (ndr->flags & (LIBNDR_ALIGN_FLAGS|LIBNDR_FLAG_NOALIGN)) { if (ndr->flags & LIBNDR_FLAG_NOALIGN) { length = 0; } else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {