@@ -739,27 +739,27 @@ static inline char *type_to_type_name(const enum thingset_type type)
739
739
static int get_function_arg_types (struct thingset_context * ts , uint16_t parent_id , char * buf ,
740
740
size_t size )
741
741
{
742
- int len = 0 ;
742
+ int total_len = 0 ;
743
743
for (unsigned int i = 0 ; i < ts -> num_objects ; i ++ ) {
744
744
if (ts -> data_objects [i ].parent_id == parent_id ) {
745
- if (len > 0 ) {
745
+ int len = 0 ;
746
+ if (total_len > 0 ) {
746
747
if (size < 2 ) {
747
748
return - THINGSET_ERR_RESPONSE_TOO_LARGE ;
748
749
}
749
- len += sprintf (buf , "," );
750
- size -= 1 ;
751
- buf += 1 ;
750
+ len += snprintf (buf , size , "," );
752
751
}
753
752
char * elementType = type_to_type_name (ts -> data_objects [i ].type );
754
- if (len > size ) {
755
- return - THINGSET_ERR_RESPONSE_TOO_LARGE ;
756
- }
757
- len += sprintf (buf , "%s" , elementType );
753
+ len += snprintf (buf + len , size - len , "%s" , elementType );
758
754
buf += len ;
759
755
size -= len ;
756
+ total_len += len ;
757
+ if (total_len > size ) {
758
+ return - THINGSET_ERR_RESPONSE_TOO_LARGE ;
759
+ }
760
760
}
761
761
}
762
- return len ;
762
+ return total_len ;
763
763
}
764
764
765
765
int thingset_get_type_name (struct thingset_context * ts , const struct thingset_data_object * obj ,
@@ -771,11 +771,11 @@ int thingset_get_type_name(struct thingset_context *ts, const struct thingset_da
771
771
if (sizeof (elementType ) > size ) {
772
772
return - THINGSET_ERR_RESPONSE_TOO_LARGE ;
773
773
}
774
- return sprintf (buf , "%s[]" , elementType );
774
+ return snprintf (buf , size , "%s[]" , elementType );
775
775
}
776
776
case THINGSET_TYPE_FN_VOID :
777
777
case THINGSET_TYPE_FN_I32 :
778
- sprintf (buf , "(" );
778
+ snprintf (buf , size , "(" );
779
779
int len = 1 + get_function_arg_types (ts , obj -> id , buf + 1 , size - 1 );
780
780
if (len < 0 ) {
781
781
return - THINGSET_ERR_RESPONSE_TOO_LARGE ;
@@ -787,18 +787,18 @@ int thingset_get_type_name(struct thingset_context *ts, const struct thingset_da
787
787
size -= len ;
788
788
switch (obj -> type ) {
789
789
case THINGSET_TYPE_FN_VOID :
790
- len += sprintf (buf , ")->()" );
790
+ len += snprintf (buf , size , ")->()" );
791
791
break ;
792
792
case THINGSET_TYPE_FN_I32 :
793
- len += sprintf (buf , ")->(i32)" );
793
+ len += snprintf (buf , size , ")->(i32)" );
794
794
break ;
795
795
default :
796
796
break ;
797
797
}
798
798
return len ;
799
799
default : {
800
800
char * type = type_to_type_name (obj -> type );
801
- return sprintf (buf , "%s" , type );
801
+ return snprintf (buf , size , "%s" , type );
802
802
}
803
803
}
804
804
}
0 commit comments