From: Andreas Schneider Date: Thu, 22 Nov 2018 14:01:44 +0000 (+0100) Subject: librpc:ndr: Fix undefined behavior in ndr.c X-Git-Tag: tdb-1.3.17~663 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f48bc840c11c0d4cfbd6b7eada15cc69218ca0f;p=thirdparty%2Fsamba.git librpc:ndr: Fix undefined behavior in ndr.c librpc/ndr/ndr.c:1430 runtime error: left shift of 1 by 31 places cannot be represented in type 'int' Signed-off-by: Andreas Schneider Reviewed-by: Gary Lockyer Autobuild-User(master): Gary Lockyer Autobuild-Date(master): Fri Nov 23 01:23:09 CET 2018 on sn-devel-144 --- diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h index de93893be19..c31496fe1dc 100644 --- a/librpc/ndr/libndr.h +++ b/librpc/ndr/libndr.h @@ -118,21 +118,21 @@ struct ndr_print { bool print_secrets; }; -#define LIBNDR_FLAG_BIGENDIAN (1<<0) -#define LIBNDR_FLAG_NOALIGN (1<<1) - -#define LIBNDR_FLAG_STR_ASCII (1<<2) -#define LIBNDR_FLAG_STR_LEN4 (1<<3) -#define LIBNDR_FLAG_STR_SIZE4 (1<<4) -#define LIBNDR_FLAG_STR_NOTERM (1<<5) -#define LIBNDR_FLAG_STR_NULLTERM (1<<6) -#define LIBNDR_FLAG_STR_SIZE2 (1<<7) -#define LIBNDR_FLAG_STR_BYTESIZE (1<<8) -#define LIBNDR_FLAG_STR_CONFORMANT (1<<10) -#define LIBNDR_FLAG_STR_CHARLEN (1<<11) -#define LIBNDR_FLAG_STR_UTF8 (1<<12) -#define LIBNDR_FLAG_STR_RAW8 (1<<13) -#define LIBNDR_STRING_FLAGS (0 | \ +#define LIBNDR_FLAG_BIGENDIAN (1U<<0) +#define LIBNDR_FLAG_NOALIGN (1U<<1) + +#define LIBNDR_FLAG_STR_ASCII (1U<<2) +#define LIBNDR_FLAG_STR_LEN4 (1U<<3) +#define LIBNDR_FLAG_STR_SIZE4 (1U<<4) +#define LIBNDR_FLAG_STR_NOTERM (1U<<5) +#define LIBNDR_FLAG_STR_NULLTERM (1U<<6) +#define LIBNDR_FLAG_STR_SIZE2 (1U<<7) +#define LIBNDR_FLAG_STR_BYTESIZE (1U<<8) +#define LIBNDR_FLAG_STR_CONFORMANT (1U<<10) +#define LIBNDR_FLAG_STR_CHARLEN (1U<<11) +#define LIBNDR_FLAG_STR_UTF8 (1U<<12) +#define LIBNDR_FLAG_STR_RAW8 (1U<<13) +#define LIBNDR_STRING_FLAGS (0U | \ LIBNDR_FLAG_STR_ASCII | \ LIBNDR_FLAG_STR_LEN4 | \ LIBNDR_FLAG_STR_SIZE4 | \ @@ -150,10 +150,10 @@ struct ndr_print { * Mark an element as SECRET, it won't be printed by * via ndr_print* unless NDR_PRINT_SECRETS is specified. */ -#define LIBNDR_FLAG_IS_SECRET (1<<14) +#define LIBNDR_FLAG_IS_SECRET (1U<<14) /* Disable string token compression */ -#define LIBNDR_FLAG_NO_COMPRESSION (1<<15) +#define LIBNDR_FLAG_NO_COMPRESSION (1U<<15) /* * don't debug NDR_ERR_BUFSIZE failures, @@ -161,25 +161,25 @@ struct ndr_print { * * return NDR_ERR_INCOMPLETE_BUFFER instead. */ -#define LIBNDR_FLAG_INCOMPLETE_BUFFER (1<<16) +#define LIBNDR_FLAG_INCOMPLETE_BUFFER (1U<<16) /* * This lets ndr_pull_subcontext_end() return * NDR_ERR_UNREAD_BYTES. */ -#define LIBNDR_FLAG_SUBCONTEXT_NO_UNREAD_BYTES (1<<17) +#define LIBNDR_FLAG_SUBCONTEXT_NO_UNREAD_BYTES (1U<<17) /* set if relative pointers should *not* be marshalled in reverse order */ -#define LIBNDR_FLAG_NO_RELATIVE_REVERSE (1<<18) +#define LIBNDR_FLAG_NO_RELATIVE_REVERSE (1U<<18) /* set if relative pointers are marshalled in reverse order */ -#define LIBNDR_FLAG_RELATIVE_REVERSE (1<<19) +#define LIBNDR_FLAG_RELATIVE_REVERSE (1U<<19) -#define LIBNDR_FLAG_REF_ALLOC (1<<20) -#define LIBNDR_FLAG_REMAINING (1<<21) -#define LIBNDR_FLAG_ALIGN2 (1<<22) -#define LIBNDR_FLAG_ALIGN4 (1<<23) -#define LIBNDR_FLAG_ALIGN8 (1<<24) +#define LIBNDR_FLAG_REF_ALLOC (1U<<20) +#define LIBNDR_FLAG_REMAINING (1U<<21) +#define LIBNDR_FLAG_ALIGN2 (1U<<22) +#define LIBNDR_FLAG_ALIGN4 (1U<<23) +#define LIBNDR_FLAG_ALIGN8 (1U<<24) #define LIBNDR_ALIGN_FLAGS ( 0 | \ LIBNDR_FLAG_NOALIGN | \ @@ -189,22 +189,22 @@ struct ndr_print { LIBNDR_FLAG_ALIGN8 | \ 0) -#define LIBNDR_PRINT_ARRAY_HEX (1<<25) -#define LIBNDR_PRINT_SET_VALUES (1<<26) +#define LIBNDR_PRINT_ARRAY_HEX (1U<<25) +#define LIBNDR_PRINT_SET_VALUES (1U<<26) /* used to force a section of IDL to be little-endian */ -#define LIBNDR_FLAG_LITTLE_ENDIAN (1<<27) +#define LIBNDR_FLAG_LITTLE_ENDIAN (1U<<27) /* used to check if alignment padding is zero */ -#define LIBNDR_FLAG_PAD_CHECK (1<<28) +#define LIBNDR_FLAG_PAD_CHECK (1U<<28) -#define LIBNDR_FLAG_NDR64 (1<<29) +#define LIBNDR_FLAG_NDR64 (1U<<29) /* set if an object uuid will be present */ -#define LIBNDR_FLAG_OBJECT_PRESENT (1<<30) +#define LIBNDR_FLAG_OBJECT_PRESENT (1U<<30) /* set to avoid recursion in ndr_size_*() calculation */ -#define LIBNDR_FLAG_NO_NDR_SIZE (1<<31) +#define LIBNDR_FLAG_NO_NDR_SIZE (1U<<31) /* useful macro for debugging */ #define NDR_PRINT_DEBUG(type, p) ndr_print_debug((ndr_print_fn_t)ndr_print_ ##type, #p, p)