From b3e8d03038402dec78b4845255f34862407983c9 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Sun, 14 Nov 2021 20:23:08 +0100 Subject: [PATCH] ctl: use unsigned int for bit left shifting - deal with runtime error: left shift of X by N places cannot be represented in type 'int' --- src/modules/ctl/binrpc.h | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/modules/ctl/binrpc.h b/src/modules/ctl/binrpc.h index bd7e2cb9c53..cb7204fffd9 100644 --- a/src/modules/ctl/binrpc.h +++ b/src/modules/ctl/binrpc.h @@ -215,12 +215,15 @@ inline static unsigned char* binrpc_write_int( unsigned char* p, int i, int *len) { int size; + unsigned int u; - for (size=4; size && ((i & (0xffu<<24))==0); i<<=8, size--); + u = (unsigned int)i; + + for (size=4; size && ((u & (0xffu<<24))==0); u<<=8, size--); *len=size; for(; (p>24); - i<<=8; + *p=(unsigned char)(u>>24); + u<<=8; } return p; } @@ -515,24 +518,28 @@ static inline int binrpc_addfault( struct binrpc_pkt* pkt, static inline unsigned char* binrpc_read_int( int* i, int len, - unsigned char* s, + unsigned char* s, unsigned char* end, int *err ) { unsigned char* start; - + unsigned int u; + start=s; *i=0; + u = 0; *err=0; for(;len>0; len--, s++){ if (s>=end){ *err=E_BINRPC_MORE_DATA; + *i = (int)u; return start; } - *i<<=8; - *i|=*s; + u<<=8; + u|=*s; }; + *i = (int)u; return s; }