@@ -545,7 +545,8 @@ void kiss_process_msg (unsigned char *kiss_msg, int kiss_len, int debug, int cli
545
545
/* Our current default is a maximum of 6 channels but it is easily */
546
546
/* increased by changing one number and recompiling. */
547
547
548
- if ((port == 2 || port == 8 ) &&
548
+ if (kiss_len > 16 &&
549
+ (port == 2 || port == 8 ) &&
549
550
kiss_msg [1 ] == 'Q' << 1 &&
550
551
kiss_msg [2 ] == 'S' << 1 &&
551
552
kiss_msg [3 ] == 'T' << 1 &&
@@ -596,6 +597,11 @@ void kiss_process_msg (unsigned char *kiss_msg, int kiss_len, int debug, int cli
596
597
597
598
case KISS_CMD_TXDELAY : /* 1 = TXDELAY */
598
599
600
+ if (kiss_len < 2 ) {
601
+ text_color_set (DW_COLOR_ERROR );
602
+ dw_printf ("KISS ERROR: Missing value for TXDELAY command.\n" );
603
+ return ;
604
+ }
599
605
text_color_set (DW_COLOR_INFO );
600
606
dw_printf ("KISS protocol set TXDELAY = %d (*10mS units = %d mS), port %d\n" , kiss_msg [1 ], kiss_msg [1 ] * 10 , port );
601
607
if (kiss_msg [1 ] < 4 || kiss_msg [1 ] > 100 ) {
@@ -608,6 +614,11 @@ void kiss_process_msg (unsigned char *kiss_msg, int kiss_len, int debug, int cli
608
614
609
615
case KISS_CMD_PERSISTENCE : /* 2 = Persistence */
610
616
617
+ if (kiss_len < 2 ) {
618
+ text_color_set (DW_COLOR_ERROR );
619
+ dw_printf ("KISS ERROR: Missing value for PERSISTENCE command.\n" );
620
+ return ;
621
+ }
611
622
text_color_set (DW_COLOR_INFO );
612
623
dw_printf ("KISS protocol set Persistence = %d, port %d\n" , kiss_msg [1 ], port );
613
624
if (kiss_msg [1 ] < 5 || kiss_msg [1 ] > 250 ) {
@@ -620,6 +631,11 @@ void kiss_process_msg (unsigned char *kiss_msg, int kiss_len, int debug, int cli
620
631
621
632
case KISS_CMD_SLOTTIME : /* 3 = SlotTime */
622
633
634
+ if (kiss_len < 2 ) {
635
+ text_color_set (DW_COLOR_ERROR );
636
+ dw_printf ("KISS ERROR: Missing value for SLOTTIME command.\n" );
637
+ return ;
638
+ }
623
639
text_color_set (DW_COLOR_INFO );
624
640
dw_printf ("KISS protocol set SlotTime = %d (*10mS units = %d mS), port %d\n" , kiss_msg [1 ], kiss_msg [1 ] * 10 , port );
625
641
if (kiss_msg [1 ] < 2 || kiss_msg [1 ] > 50 ) {
@@ -632,6 +648,11 @@ void kiss_process_msg (unsigned char *kiss_msg, int kiss_len, int debug, int cli
632
648
633
649
case KISS_CMD_TXTAIL : /* 4 = TXtail */
634
650
651
+ if (kiss_len < 2 ) {
652
+ text_color_set (DW_COLOR_ERROR );
653
+ dw_printf ("KISS ERROR: Missing value for TXTAIL command.\n" );
654
+ return ;
655
+ }
635
656
text_color_set (DW_COLOR_INFO );
636
657
dw_printf ("KISS protocol set TXtail = %d (*10mS units = %d mS), port %d\n" , kiss_msg [1 ], kiss_msg [1 ] * 10 , port );
637
658
if (kiss_msg [1 ] < 2 ) {
@@ -644,13 +665,23 @@ void kiss_process_msg (unsigned char *kiss_msg, int kiss_len, int debug, int cli
644
665
645
666
case KISS_CMD_FULLDUPLEX : /* 5 = FullDuplex */
646
667
668
+ if (kiss_len < 2 ) {
669
+ text_color_set (DW_COLOR_ERROR );
670
+ dw_printf ("KISS ERROR: Missing value for FULLDUPLEX command.\n" );
671
+ return ;
672
+ }
647
673
text_color_set (DW_COLOR_INFO );
648
674
dw_printf ("KISS protocol set FullDuplex = %d, port %d\n" , kiss_msg [1 ], port );
649
675
xmit_set_fulldup (port , kiss_msg [1 ]);
650
676
break ;
651
677
652
678
case KISS_CMD_SET_HARDWARE : /* 6 = TNC specific */
653
679
680
+ if (kiss_len < 2 ) {
681
+ text_color_set (DW_COLOR_ERROR );
682
+ dw_printf ("KISS ERROR: Missing value for SET HARDWARE command.\n" );
683
+ return ;
684
+ }
654
685
kiss_msg [kiss_len ] = '\0' ;
655
686
text_color_set (DW_COLOR_INFO );
656
687
dw_printf ("KISS protocol set hardware \"%s\", port %d\n" , (char * )(kiss_msg + 1 ), port );
0 commit comments