diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h index 37a3145..9e51fd9 100644 --- a/librpc/ndr/libndr.h +++ b/librpc/ndr/libndr.h @@ -135,7 +135,7 @@ struct ndr_print { #define LIBNDR_FLAG_ALIGN4 (1<<23) #define LIBNDR_FLAG_ALIGN8 (1<<24) -#define LIBNDR_ALIGN_FLAGS (LIBNDR_FLAG_ALIGN2|LIBNDR_FLAG_ALIGN4|LIBNDR_FLAG_ALIGN8) +#define LIBNDR_ALIGN_FLAGS (LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_ALIGN2|LIBNDR_FLAG_ALIGN4|LIBNDR_FLAG_ALIGN8) #define LIBNDR_PRINT_ARRAY_HEX (1<<25) #define LIBNDR_PRINT_SET_VALUES (1<<26) diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c index 2279d1c..3b83b65 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; + /* Ensure we only have the align + flag set in the new_flags, remove + any old align flag. */ + (*pflags) &= ~LIBNDR_ALIGN_FLAGS; } if (new_flags & LIBNDR_FLAG_NO_RELATIVE_REVERSE) { (*pflags) &= ~LIBNDR_FLAG_RELATIVE_REVERSE;