@@ -1062,26 +1062,32 @@ static int slirp4netns_config_from_cidr6(struct slirp4netns_config *cfg,
1062
1062
return -1 ;
1063
1063
}
1064
1064
1065
- strcpy (tmp , net );
1066
- strcat (tmp , DEFAULT_VHOST_OFFSET6 );
1065
+ #define MAX (a ,b ) (((a)>(b))?(a):(b))
1066
+
1067
+ strncpy (tmp , net , sizeof (tmp ));
1068
+ strncat (tmp , DEFAULT_VHOST_OFFSET6 ,
1069
+ MAX (0 , INET6_ADDRSTRLEN - strlen (tmp ) - strlen (DEFAULT_VHOST_OFFSET6 )));
1067
1070
if (inet_pton (AF_INET6 , tmp , & cfg -> vhost6 ) != 1 ) {
1068
1071
return -1 ;
1069
1072
}
1070
1073
1071
- strcpy (tmp , net );
1072
- strcat (tmp , DEFAULT_VDHCPSTART_OFFSET6 );
1074
+ strncpy (tmp , net , sizeof (tmp ));
1075
+ strncat (tmp , DEFAULT_VDHCPSTART_OFFSET6 ,
1076
+ MAX (0 , INET6_ADDRSTRLEN - strlen (tmp ) - strlen (DEFAULT_VDHCPSTART_OFFSET6 )));
1073
1077
if (inet_pton (AF_INET6 , tmp , & cfg -> vdhcp_start6 ) != 1 ) {
1074
1078
return -1 ;
1075
1079
}
1076
1080
1077
- strcpy (tmp , net );
1078
- strcat (tmp , DEFAULT_VNAMESERVER_OFFSET6 );
1081
+ strncpy (tmp , net , sizeof (tmp ));
1082
+ strncat (tmp , DEFAULT_VNAMESERVER_OFFSET6 ,
1083
+ MAX (0 , INET6_ADDRSTRLEN - strlen (tmp ) - strlen (DEFAULT_VNAMESERVER_OFFSET6 )));
1079
1084
if (inet_pton (AF_INET6 , tmp , & cfg -> vnameserver6 ) != 1 ) {
1080
1085
return -1 ;
1081
1086
}
1082
1087
1083
- strcpy (tmp , net );
1084
- strcat (tmp , DEFAULT_RECOMMENDED_VGUEST_OFFSET6 );
1088
+ strncpy (tmp , net , sizeof (tmp ));
1089
+ strncat (tmp , DEFAULT_RECOMMENDED_VGUEST_OFFSET6 ,
1090
+ MAX (0 , INET6_ADDRSTRLEN - strlen (tmp ) - strlen (DEFAULT_RECOMMENDED_VGUEST_OFFSET6 )));
1085
1091
if (inet_pton (AF_INET6 , tmp , & cfg -> recommended_vguest6 ) != 1 ) {
1086
1092
return -1 ;
1087
1093
}
0 commit comments