12
12
*****************************************************************************/
13
13
14
14
#include "zwave_api_demo.h"
15
+ #include <assert.h>
15
16
#include <string.h>
16
17
17
18
extern bool exit_program ;
@@ -307,18 +308,32 @@ static sl_status_t request_nif()
307
308
static sl_status_t node_list ()
308
309
{
309
310
zwave_nodemask_t node_list = {0 };
310
-
311
+ int written = 0 ;
311
312
sl_status_t command_status = zwapi_get_node_list (node_list );
312
313
if (command_status == SL_STATUS_OK ) {
313
314
char message [MAXIMUM_MESSAGE_SIZE ];
314
315
uint16_t index = 0 ;
315
- index
316
- += snprintf (message + index , sizeof (message ) - index , "NodeID List: " );
316
+
317
+ written
318
+ = snprintf (message + index , sizeof (message ) - index , "NodeID List: " );
319
+ if (written < 0 || written >= (int )(sizeof (message ) - index )) {
320
+ sl_log_error (LOG_TAG , "Overflow in node_list\n" );
321
+ assert (false);
322
+ return SL_STATUS_WOULD_OVERFLOW ;
323
+ }
324
+ index += written ;
325
+
317
326
for (zwave_node_id_t node_id = ZW_MIN_NODE_ID ; node_id <= ZW_LR_MAX_NODE_ID ;
318
327
node_id ++ ) {
319
328
if (ZW_IS_NODE_IN_MASK (node_id , node_list ) == 1 ) {
320
- index
321
- += snprintf (message + index , sizeof (message ) - index , "%d " , node_id );
329
+ written
330
+ = snprintf (message + index , sizeof (message ) - index , "%d " , node_id );
331
+ if (written < 0 || written >= (int )(sizeof (message ) - index )) {
332
+ sl_log_error (LOG_TAG , "Overflow in node_list\n" );
333
+ assert (false);
334
+ return SL_STATUS_WOULD_OVERFLOW ;
335
+ }
336
+ index += written ;
322
337
}
323
338
}
324
339
sl_log_info (LOG_TAG , "%s\n" , message );
@@ -337,15 +352,28 @@ static sl_status_t failed_node_list()
337
352
}
338
353
char message [MAXIMUM_MESSAGE_SIZE ];
339
354
uint16_t index = 0 ;
340
- index += snprintf (message + index ,
341
- sizeof (message ) - index ,
342
- "Failed NodeID List: " );
355
+ int written = snprintf (message + index ,
356
+ sizeof (message ) - index ,
357
+ "Failed NodeID List: " );
358
+ if (written < 0 || written >= (int )(sizeof (message ) - index )) {
359
+ sl_log_error (LOG_TAG , "Overflow in failed_node_list\n" );
360
+ assert (false);
361
+ return SL_STATUS_WOULD_OVERFLOW ;
362
+ }
363
+ index += written ;
364
+
343
365
for (zwave_node_id_t node_id = ZW_MIN_NODE_ID ; node_id <= ZW_LR_MAX_NODE_ID ;
344
366
node_id ++ ) {
345
367
if (ZW_IS_NODE_IN_MASK (node_id , node_list ) == 1 ) {
346
368
if (zwapi_is_node_failed (node_id )) {
347
- index
348
- += snprintf (message + index , sizeof (message ) - index , "%d " , node_id );
369
+ written
370
+ = snprintf (message + index , sizeof (message ) - index , "%d " , node_id );
371
+ if (written < 0 || written >= (int )(sizeof (message ) - index )) {
372
+ sl_log_error (LOG_TAG , "Overflow in failed_node_list\n" );
373
+ assert (false);
374
+ return SL_STATUS_WOULD_OVERFLOW ;
375
+ }
376
+ index += written ;
349
377
}
350
378
}
351
379
}
@@ -359,17 +387,31 @@ static sl_status_t virtual_node_list()
359
387
zwave_nodemask_t node_list = {0 };
360
388
361
389
sl_status_t command_status = zwapi_get_virtual_nodes (node_list );
390
+ int written = 0 ;
362
391
if (command_status == SL_STATUS_OK ) {
363
392
char message [MAXIMUM_MESSAGE_SIZE ];
364
393
uint16_t index = 0 ;
365
- index += snprintf (message + index ,
366
- sizeof (message ) - index ,
367
- "Virtual NodeID List: " );
394
+ written = snprintf (message + index ,
395
+ sizeof (message ) - index ,
396
+ "Virtual NodeID List: " );
397
+ if (written < 0 || written >= (int )(sizeof (message ) - index )) {
398
+ sl_log_error (LOG_TAG , "Overflow in virtual_node_list\n" );
399
+ assert (false);
400
+ return SL_STATUS_WOULD_OVERFLOW ;
401
+ }
402
+ index += written ;
403
+
368
404
for (zwave_node_id_t node_id = ZW_MIN_NODE_ID ; node_id <= ZW_LR_MAX_NODE_ID ;
369
405
node_id ++ ) {
370
406
if (ZW_IS_NODE_IN_MASK (node_id , node_list ) == 1 ) {
371
- index
372
- += snprintf (message + index , sizeof (message ) - index , "%d " , node_id );
407
+ written
408
+ = snprintf (message + index , sizeof (message ) - index , "%d " , node_id );
409
+ if (written < 0 || written >= (int )(sizeof (message ) - index )) {
410
+ sl_log_error (LOG_TAG , "Overflow in virtual_node_list\n" );
411
+ assert (false);
412
+ return SL_STATUS_WOULD_OVERFLOW ;
413
+ }
414
+ index += written ;
373
415
}
374
416
}
375
417
sl_log_info (LOG_TAG , "%s\n" , message );
0 commit comments