@@ -25,9 +25,11 @@ struct __attribute__((packed)) SensorDataPacket {
2525 float result = 0 ;
2626 uint8_t length = sizeof (result );
2727 if (index + length > SENSOR_DATA_FIXED_LENGTH ) {
28- length = SENSOR_DATA_FIXED_LENGTH - index ;
28+ //to safe guard against overflow
29+ length = SENSOR_DATA_FIXED_LENGTH > index ? SENSOR_DATA_FIXED_LENGTH - index : 0 ;
2930 }
30- memcpy (& result , & data [index ], sizeof (result ));
31+ if (length > 0 )
32+ memcpy (& result , & data [index ], length ) ;
3133 return result ;
3234 }
3335
@@ -42,29 +44,32 @@ struct __attribute__((packed)) SensorDataPacket {
4244 uint16_t result = 0 ;
4345 uint8_t length = sizeof (result );
4446 if (index + length > SENSOR_DATA_FIXED_LENGTH ) {
45- length = SENSOR_DATA_FIXED_LENGTH - index ;
47+ length = SENSOR_DATA_FIXED_LENGTH > index ? SENSOR_DATA_FIXED_LENGTH - index : 0 ;
4648 }
47- memcpy (& result , & data [index ], length );
49+ if (length > 0 )
50+ memcpy (& result , & data [index ], length );
4851 return result ;
4952 }
5053
5154 uint32_t getUint24 (uint8_t index ) {
5255 uint32_t result = 0 ;
5356 uint8_t length = 3 ;
5457 if (index + length > SENSOR_DATA_FIXED_LENGTH ) {
55- length = SENSOR_DATA_FIXED_LENGTH - index ;
58+ length = SENSOR_DATA_FIXED_LENGTH > index ? SENSOR_DATA_FIXED_LENGTH - index : 0 ;
5659 }
57- memcpy (& result , & data [index ], length );
60+ if (length > 0 )
61+ memcpy (& result , & data [index ], length );
5862 return result ;
5963 }
6064
6165 uint32_t getUint32 (uint8_t index ) {
6266 uint32_t result = 0 ;
6367 uint8_t length = sizeof (result );
6468 if (index + length > SENSOR_DATA_FIXED_LENGTH ) {
65- length = SENSOR_DATA_FIXED_LENGTH - index ;
69+ length = SENSOR_DATA_FIXED_LENGTH > index ? SENSOR_DATA_FIXED_LENGTH - index : 0 ;
6670 }
67- memcpy (& result , & data [index ], length );
71+ if (length > 0 )
72+ memcpy (& result , & data [index ], length );
6873 return result ;
6974 }
7075
@@ -79,19 +84,21 @@ struct __attribute__((packed)) SensorDataPacket {
7984 int16_t result = 0 ;
8085 uint8_t length = sizeof (result );
8186 if (index + length > SENSOR_DATA_FIXED_LENGTH ) {
82- length = SENSOR_DATA_FIXED_LENGTH - index ;
87+ length = SENSOR_DATA_FIXED_LENGTH > index ? SENSOR_DATA_FIXED_LENGTH - index : 0 ;
8388 }
84- memcpy (& result , & data [index ], length );
89+ if (length > 0 )
90+ memcpy (& result , & data [index ], length );
8591 return result ;
8692 }
8793
8894 int32_t getInt32 (uint8_t index ) {
8995 int32_t result = 0 ;
9096 uint8_t length = sizeof (result );
9197 if (index + length > SENSOR_DATA_FIXED_LENGTH ) {
92- length = SENSOR_DATA_FIXED_LENGTH - index ;
98+ length = SENSOR_DATA_FIXED_LENGTH > index ? SENSOR_DATA_FIXED_LENGTH - index : 0 ;
9399 }
94- memcpy (& result , & data [index ], length );
100+ if (length > 0 )
101+ memcpy (& result , & data [index ], length );
95102 return result ;
96103 }
97104};
0 commit comments