@@ -25,9 +25,11 @@ struct __attribute__((packed)) SensorDataPacket {
25
25
float result = 0 ;
26
26
uint8_t length = sizeof (result );
27
27
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 ;
29
30
}
30
- memcpy (& result , & data [index ], sizeof (result ));
31
+ if (length > 0 )
32
+ memcpy (& result , & data [index ], length ) ;
31
33
return result ;
32
34
}
33
35
@@ -42,29 +44,32 @@ struct __attribute__((packed)) SensorDataPacket {
42
44
uint16_t result = 0 ;
43
45
uint8_t length = sizeof (result );
44
46
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 ;
46
48
}
47
- memcpy (& result , & data [index ], length );
49
+ if (length > 0 )
50
+ memcpy (& result , & data [index ], length );
48
51
return result ;
49
52
}
50
53
51
54
uint32_t getUint24 (uint8_t index ) {
52
55
uint32_t result = 0 ;
53
56
uint8_t length = 3 ;
54
57
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 ;
56
59
}
57
- memcpy (& result , & data [index ], length );
60
+ if (length > 0 )
61
+ memcpy (& result , & data [index ], length );
58
62
return result ;
59
63
}
60
64
61
65
uint32_t getUint32 (uint8_t index ) {
62
66
uint32_t result = 0 ;
63
67
uint8_t length = sizeof (result );
64
68
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 ;
66
70
}
67
- memcpy (& result , & data [index ], length );
71
+ if (length > 0 )
72
+ memcpy (& result , & data [index ], length );
68
73
return result ;
69
74
}
70
75
@@ -79,19 +84,21 @@ struct __attribute__((packed)) SensorDataPacket {
79
84
int16_t result = 0 ;
80
85
uint8_t length = sizeof (result );
81
86
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 ;
83
88
}
84
- memcpy (& result , & data [index ], length );
89
+ if (length > 0 )
90
+ memcpy (& result , & data [index ], length );
85
91
return result ;
86
92
}
87
93
88
94
int32_t getInt32 (uint8_t index ) {
89
95
int32_t result = 0 ;
90
96
uint8_t length = sizeof (result );
91
97
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 ;
93
99
}
94
- memcpy (& result , & data [index ], length );
100
+ if (length > 0 )
101
+ memcpy (& result , & data [index ], length );
95
102
return result ;
96
103
}
97
104
};
0 commit comments