@@ -155,7 +155,7 @@ uint16_t sn_coap_builder_calc_needed_packet_data_size(const sn_coap_hdr_s *src_c
155
155
uint16_t sn_coap_builder_calc_needed_packet_data_size_2 (const sn_coap_hdr_s * src_coap_msg_ptr , uint16_t blockwise_payload_size )
156
156
{
157
157
(void )blockwise_payload_size ;
158
- uint16_t returned_byte_count = 0 ;
158
+ uint_fast32_t returned_byte_count = 0 ;
159
159
160
160
if (!src_coap_msg_ptr ) {
161
161
return 0 ;
@@ -176,7 +176,6 @@ uint16_t sn_coap_builder_calc_needed_packet_data_size_2(const sn_coap_hdr_s *src
176
176
tr_error ("sn_coap_builder_calc_needed_packet_data_size_2 - token too large!" );
177
177
return 0 ;
178
178
}
179
-
180
179
returned_byte_count += src_coap_msg_ptr -> token_len ;
181
180
}
182
181
/* URI PATH - Repeatable option. Length of one option is 0-255 */
@@ -198,7 +197,6 @@ uint16_t sn_coap_builder_calc_needed_packet_data_size_2(const sn_coap_hdr_s *src
198
197
tr_error ("sn_coap_builder_calc_needed_packet_data_size_2 - content format too large!" );
199
198
return 0 ;
200
199
}
201
-
202
200
returned_byte_count += sn_coap_builder_options_build_add_uint_option (NULL , src_coap_msg_ptr -> content_format , COAP_OPTION_CONTENT_FORMAT , & tempInt );
203
201
}
204
202
/* If options list pointer exists */
@@ -212,7 +210,6 @@ uint16_t sn_coap_builder_calc_needed_packet_data_size_2(const sn_coap_hdr_s *src
212
210
tr_error ("sn_coap_builder_calc_needed_packet_data_size_2 - accept too large!" );
213
211
return 0 ;
214
212
}
215
-
216
213
returned_byte_count += sn_coap_builder_options_build_add_uint_option (NULL , src_options_list_ptr -> accept , COAP_OPTION_ACCEPT , & tempInt );
217
214
}
218
215
/* MAX AGE - An integer option, omitted for default. Up to 4 bytes */
@@ -266,7 +263,6 @@ uint16_t sn_coap_builder_calc_needed_packet_data_size_2(const sn_coap_hdr_s *src
266
263
tr_error ("sn_coap_builder_calc_needed_packet_data_size_2 - uri host too large!" );
267
264
return 0 ;
268
265
}
269
-
270
266
returned_byte_count += src_options_list_ptr -> uri_host_len ;
271
267
}
272
268
/* LOCATION PATH - Repeatable option. Length of this option is 0-255 bytes*/
@@ -359,8 +355,13 @@ uint16_t sn_coap_builder_calc_needed_packet_data_size_2(const sn_coap_hdr_s *src
359
355
}
360
356
returned_byte_count += sn_coap_builder_options_calculate_jump_need (src_coap_msg_ptr );
361
357
}
362
- return returned_byte_count ;
358
+ if (returned_byte_count > UINT16_MAX ) {
359
+ tr_error ("sn_coap_builder_calc_needed_packet_data_size_2 - packet data size would overflow!" );
360
+ return 0 ;
361
+ }
362
+ return (uint16_t )returned_byte_count ;
363
363
}
364
+
364
365
/**
365
366
* \fn static uint8_t sn_coap_builder_options_calculate_jump_need(sn_coap_hdr_s *src_coap_msg_ptr)
366
367
*
0 commit comments