@@ -93,6 +93,9 @@ bool copyCBORStringToArray(CborValue * param, char * dest, size_t dest_size) {
93
93
char * val = 0 ;
94
94
size_t val_size = 0 ;
95
95
if (cbor_value_dup_text_string (param, &val, &val_size, NULL ) == CborNoError) {
96
+ if (val_size > dest_size) {
97
+ val_size = dest_size;
98
+ }
96
99
strncpy (dest, val, dest_size);
97
100
free (val);
98
101
return true ;
@@ -101,6 +104,22 @@ bool copyCBORStringToArray(CborValue * param, char * dest, size_t dest_size) {
101
104
return false ;
102
105
}
103
106
107
+ bool copyCBORByteToArray (CborValue * param, uint8_t * dest, size_t dest_size) {
108
+ if (cbor_value_is_byte_string (param)) {
109
+ uint8_t * val = 0 ;
110
+ size_t val_size = 0 ;
111
+ if (cbor_value_dup_byte_string (param, &val, &val_size, NULL ) == CborNoError) {
112
+ if (val_size > dest_size) {
113
+ val_size = dest_size;
114
+ }
115
+ std::copy (val, val + dest_size, dest);
116
+ free (val);
117
+ return true ;
118
+ }
119
+ }
120
+ return false ;
121
+ }
122
+
104
123
MessageDecoder::ArrayParserState MessageDecoder::decodeGetThingIdCommand (CborValue * param, Message * message) {
105
124
GetThingIdCommand * thingCommand = (GetThingIdCommand *) message;
106
125
@@ -169,6 +188,26 @@ MessageDecoder::ArrayParserState MessageDecoder::decodeOTAAvailableCommand(CborV
169
188
return ArrayParserState::Error;
170
189
}
171
190
191
+ if (cbor_value_advance (param) != CborNoError) {
192
+ return ArrayParserState::Error;
193
+ }
194
+
195
+ if (copyCBORByteToArray (param, ota->fields .params .initialSha256 , sizeof (ota->fields .params .initialSha256 ))) {
196
+ return ArrayParserState::LeaveArray;
197
+ } else {
198
+ return ArrayParserState::Error;
199
+ }
200
+
201
+ if (cbor_value_advance (param) != CborNoError) {
202
+ return ArrayParserState::Error;
203
+ }
204
+
205
+ if (copyCBORByteToArray (param, ota->fields .params .finalSha256 , sizeof (ota->fields .params .finalSha256 ))) {
206
+ return ArrayParserState::LeaveArray;
207
+ } else {
208
+ return ArrayParserState::Error;
209
+ }
210
+
172
211
return ArrayParserState::LeaveArray;
173
212
}
174
213
0 commit comments