@@ -156,10 +156,13 @@ static uint16_t read_uint16(struct ParserContext *context)
156156 }
157157
158158 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
159- uint16_t value = context -> ptr [0 ] | ((uint16_t )context -> ptr [1 ] << 8 );
159+ uint16_t low = (uint16_t )context -> ptr [0 ];
160+ uint16_t high = (uint16_t )(context -> ptr [1 ] << 8 );
160161 #else
161- uint16_t value = ((uint16_t )context -> ptr [0 ] << 8 ) | context -> ptr [1 ];
162+ uint16_t low = (uint16_t )context -> ptr [1 ];
163+ uint16_t high = (uint16_t )(context -> ptr [0 ] << 8 );
162164 #endif
165+ uint16_t value = high | low ;
163166
164167 context -> ptr += 2 ;
165168 return value ;
@@ -177,10 +180,11 @@ static uint32_t read_uint32(struct ParserContext *context)
177180 for (int i = 0 ; i < 4 ; ++ i )
178181 {
179182 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
180- value |= context -> ptr [i ] << (i * 8 );
183+ uint32_t v = ( uint32_t )( context -> ptr [i ] << (i * 8 ) );
181184 #else
182- value |= context -> ptr [i ] << ((3 - i ) * 8 );
185+ uint32_t v = ( uint32_t )( context -> ptr [i ] << ((3 - i ) * 8 ) );
183186 #endif
187+ value |= v ;
184188 }
185189 context -> ptr += 4 ;
186190 return value ;
@@ -198,10 +202,11 @@ static uint64_t read_uint64(struct ParserContext *context)
198202 for (int i = 0 ; i < 8 ; ++ i )
199203 {
200204 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
201- value |= context -> ptr [i ] << (i * 8 );
205+ uint64_t v = ( uint64_t )( context -> ptr [i ] << (i * 8 ) );
202206 #else
203- value |= context -> ptr [i ] << ((7 - i ) * 8 );
207+ uint64_t v = ( uint64_t )( context -> ptr [i ] << ((7 - i ) * 8 ) );
204208 #endif
209+ value |= v ;
205210 }
206211
207212 context -> ptr += 8 ;
0 commit comments